X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FUtil%2FParseUrl.php;h=04afc927ba6cec4229c8167a6bcafe66e4c317d9;hb=720a43461d67ab229de0aecfc5008f22cc4c1c54;hp=915a143a0473b87cb2f0de059ed0d84b13e2ebc2;hpb=0651ace4e4b3668a61ba076dfb7df8b93b4485e6;p=friendica.git diff --git a/src/Util/ParseUrl.php b/src/Util/ParseUrl.php index 915a143a04..04afc927ba 100644 --- a/src/Util/ParseUrl.php +++ b/src/Util/ParseUrl.php @@ -1,6 +1,6 @@ head($url); + $curlResult = DI::httpClient()->head($url); if (!$curlResult->isSuccess()) { return []; } @@ -213,8 +214,9 @@ class ParseUrl return $siteinfo; } - $curlResult = DI::httpRequest()->get($url, ['content_length' => 1000000]); + $curlResult = DI::httpClient()->get($url, [HttpClientOptions::CONTENT_LENGTH => 1000000]); if (!$curlResult->isSuccess() || empty($curlResult->getBody())) { + Logger::info('Empty body or error when fetching', ['url' => $url, 'success' => $curlResult->isSuccess(), 'code' => $curlResult->getReturnCode()]); return $siteinfo; } @@ -343,9 +345,6 @@ class ParseUrl $siteinfo['title'] = trim($list->item(0)->nodeValue); } - $twitter_card = false; - $twitter_image = false; - $list = $xpath->query('//meta[@name]'); foreach ($list as $node) { $meta_tag = []; @@ -373,23 +372,28 @@ class ParseUrl break; case 'twitter:image': $siteinfo['image'] = $meta_tag['content']; - $twitter_image = true; break; case 'twitter:image:src': $siteinfo['image'] = $meta_tag['content']; break; - case 'twitter:card': - // Detect photo pages - if ($meta_tag['content'] == 'summary_large_image') { - $twitter_card = true; - } - break; case 'twitter:description': $siteinfo['text'] = trim($meta_tag['content']); break; case 'twitter:title': $siteinfo['title'] = trim($meta_tag['content']); break; + case 'twitter:player': + $siteinfo['player']['embed'] = trim($meta_tag['content']); + break; + case 'twitter:player:stream': + $siteinfo['player']['stream'] = trim($meta_tag['content']); + break; + case 'twitter:player:width': + $siteinfo['player']['width'] = intval($meta_tag['content']); + break; + case 'twitter:player:height': + $siteinfo['player']['height'] = intval($meta_tag['content']); + break; case 'dc.title': $siteinfo['title'] = trim($meta_tag['content']); break; @@ -448,6 +452,12 @@ class ParseUrl case 'og:site_name': $siteinfo['publisher_name'] = trim($meta_tag['content']); break; + case 'og:locale': + $siteinfo['language'] = trim($meta_tag['content']); + break; + case 'og:type': + $siteinfo['pagetype'] = trim($meta_tag['content']); + break; case 'twitter:description': $siteinfo['text'] = trim($meta_tag['content']); break; @@ -456,7 +466,6 @@ class ParseUrl break; case 'twitter:image': $siteinfo['image'] = $meta_tag['content']; - $twitter_image = true; break; } } @@ -471,11 +480,22 @@ class ParseUrl } } -// Currently deactivated, see https://github.com/friendica/friendica/pull/10148#issuecomment-821512658 - // Prevent to have a photo type without an image -// if ($twitter_card && $twitter_image && !empty($siteinfo['image'])) { -// $siteinfo['type'] = 'photo'; -// } + if (!empty($siteinfo['player']['stream'])) { + // Only add player data to media arrays if there is no duplicate + $content_urls = array_merge(array_column($siteinfo['audio'] ?? [], 'content'), array_column($siteinfo['video'] ?? [], 'content')); + if (!in_array($siteinfo['player']['stream'], $content_urls)) { + $contenttype = self::getContentType($siteinfo['player']['stream']); + if (!empty($contenttype[0]) && in_array($contenttype[0], ['audio', 'video'])) { + $media = ['content' => $siteinfo['player']['stream']]; + + if (!empty($siteinfo['player']['embed'])) { + $media['embed'] = $siteinfo['player']['embed']; + } + + $siteinfo[$contenttype[0]][] = $media; + } + } + } if (!empty($siteinfo['image'])) { $siteinfo['images'] = $siteinfo['images'] ?? []; @@ -497,6 +517,8 @@ class ParseUrl Hook::callAll('getsiteinfo', $siteinfo); + ksort($siteinfo); + return $siteinfo; } @@ -506,9 +528,9 @@ class ParseUrl * * @param string $page_url * @param array $siteinfo - * @return void + * @return array */ - private static function checkMedia(string $page_url, array $siteinfo) + private static function checkMedia(string $page_url, array $siteinfo) : array { if (!empty($siteinfo['images'])) { array_walk($siteinfo['images'], function (&$image) use ($page_url) { @@ -571,8 +593,8 @@ class ParseUrl } if (!empty($embed)) { $media['embed'] = $embed; - if (!empty($media['main'])) { - $siteinfo['embed'] = $embed; + if (empty($siteinfo['player']['embed'])) { + $siteinfo['player']['embed'] = $embed; } } if (!empty($content)) { @@ -952,6 +974,16 @@ class ParseUrl } } + $content = JsonLD::fetchElement($jsonld, 'datePublished'); + if (!empty($content) && is_string($content)) { + $jsonldinfo['published'] = DateTimeFormat::utc($content); + } + + $content = JsonLD::fetchElement($jsonld, 'dateModified'); + if (!empty($content) && is_string($content)) { + $jsonldinfo['modified'] = DateTimeFormat::utc($content); + } + $jsonldinfo = self::parseJsonLdAuthor($jsonldinfo, $jsonld); Logger::info('Fetched article information', ['url' => $siteinfo['url'], 'fetched' => $jsonldinfo]); @@ -1115,7 +1147,11 @@ class ParseUrl } $content = JsonLD::fetchElement($jsonld, 'image', 'url', '@type', 'ImageObject'); - if (!empty($content)) { + if (!empty($content) && !is_string($content)) { + Logger::notice('Unexpected return value for the author image', ['content' => $content]); + } + + if (!empty($content) && is_string($content)) { $jsonldinfo['author_img'] = trim($content); }