• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/urlpreview/parser/oembed.php
  • Класс: BitrixMainUrlPreviewParserOembed
  • Вызов: Oembed::handle
public function handle(HtmlDocument $document, HttpClient $httpClient = null)
{
	if(!$this->detectOembedLink($document) || $this->metadataUrl == '')
	{
		return;
	}

	$isHttpClientPassed = true;
	if(!$httpClient)
	{
		$httpClient = $this->initHttpClient();
		$isHttpClientPassed = false;
	}
	$rawMetadata = $this->getRawMetaData($httpClient);
	// if request was served through http - try to switch to https
	if(
		(
			!$rawMetadata
			|| $httpClient->getStatus() === 403
		)
		&& mb_strpos($this->metadataUrl, 'http://') === 0)
	{
		if(!$isHttpClientPassed)
		{
			$httpClient = $this->initHttpClient();
		}
		$metadataUrl = str_replace('http://', 'https://', $this->metadataUrl);
		$rawMetadata = $httpClient->get($metadataUrl);
	}

	if($rawMetadata === false)
	{
		return;
	}

	$parsedMetadata = $this->parseMetadata($rawMetadata);
	if($parsedMetadata !== false)
	{
		if($this->metadataEncoding <> '' && $document->getEncoding() !== $this->metadataEncoding)
		{
			$parsedMetadata = Encoding::convertEncoding($parsedMetadata, $this->metadataEncoding, $document->getEncoding());
		}

		if($document->getTitle() == '' && $parsedMetadata['title'] != '')
		{
			$document->setTitle($parsedMetadata['title']);
		}

		if($document->getImage() == '' && $parsedMetadata['thumbnail_url'] != '')
		{
			$document->setImage($parsedMetadata['thumbnail_url']);
		}

		if($document->getEmdbed() == '' && $parsedMetadata['html'] != '')
		{
			$document->setEmbed($parsedMetadata['html']);
		}

		if($document->getExtraField('PROVIDER_NAME') == '' && $parsedMetadata['provider_name'] != '')
		{
			$document->setExtraField('PROVIDER_NAME', $parsedMetadata['provider_name']);
		}

		if($document->getExtraField('VIDEO_WIDTH') == '' && $parsedMetadata['width'] != '')
		{
			$document->setExtraField('VIDEO_WIDTH', $parsedMetadata['width']);
		}

		if($document->getExtraField('VIDEO_HEIGHT') == '' && $parsedMetadata['height'] != '')
		{
			$document->setExtraField('VIDEO_HEIGHT', $parsedMetadata['height']);
		}
	}
}