/**
* Fetch the content type of the given url
* @param string $url URL of the page
- * @return array content type
+ * @return array content type
*/
public static function getContentType(string $url)
{
];
if ($count > 10) {
- Logger::log('Endless loop detected for ' . $url, Logger::DEBUG);
+ Logger::notice('Endless loop detected', ['url' => $url]);
return $siteinfo;
}
}
$curlResult = DI::httpRequest()->get($url);
- if (!$curlResult->isSuccess()) {
+ if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
return $siteinfo;
}
// See https://github.com/friendica/friendica/issues/5470#issuecomment-418351211
$charset = str_ireplace('latin-1', 'latin1', $charset);
- Logger::log('detected charset ' . $charset, Logger::DEBUG);
+ Logger::info('detected charset', ['charset' => $charset]);
$body = iconv($charset, 'UTF-8//TRANSLIT', $body);
}
$siteinfo['title'] = trim($list->item(0)->nodeValue);
}
+ $twitter_card = false;
+ $twitter_image = false;
+
$list = $xpath->query('//meta[@name]');
foreach ($list as $node) {
$meta_tag = [];
break;
case 'twitter:image':
$siteinfo['image'] = $meta_tag['content'];
+ $twitter_image = true;
break;
case 'twitter:image:src':
$siteinfo['image'] = $meta_tag['content'];
case 'twitter:card':
// Detect photo pages
if ($meta_tag['content'] == 'summary_large_image') {
- $siteinfo['type'] = 'photo';
+ $twitter_card = true;
}
break;
case 'twitter:description':
break;
case 'twitter:image':
$siteinfo['image'] = $meta_tag['content'];
+ $twitter_image = true;
break;
}
}
}
}
+// Currently deactivated, see https://github.com/friendica/friendica/pull/10148#issuecomment-821512658
// Prevent to have a photo type without an image
- if ((empty($siteinfo['image']) || !empty($siteinfo['text'])) && ($siteinfo['type'] == 'photo')) {
- $siteinfo['type'] = 'link';
- }
+// if ($twitter_card && $twitter_image && !empty($siteinfo['image'])) {
+// $siteinfo['type'] = 'photo';
+// }
if (!empty($siteinfo['image'])) {
$siteinfo['images'] = $siteinfo['images'] ?? [];
{
if (!empty($siteinfo['images'])) {
array_walk($siteinfo['images'], function (&$image) use ($page_url) {
- $image = [];
// According to the specifications someone could place a picture url into the content field as well.
// But this doesn't seem to happen in the wild, so we don't cover it here.
if (!empty($image['url'])) {
$image['contenttype'] = $photodata['mime'];
unset($image['url']);
ksort($image);
+ } else {
+ $image = [];
}
+ } else {
+ $image = [];
}
});
{
if (!empty($jsonld['@graph']) && is_array($jsonld['@graph'])) {
foreach ($jsonld['@graph'] as $part) {
- if (!empty($part)) {
+ if (!empty($part) && is_array($part)) {
$siteinfo = self::parseParts($siteinfo, $part);
}
}
}
if ($numeric_keys) {
foreach ($jsonld as $part) {
- if (!empty($part)) {
+ if (!empty($part) && is_array($part)) {
$siteinfo = self::parseParts($siteinfo, $part);
}
}
array_walk_recursive($siteinfo, function (&$element) {
if (is_string($element)) {
- $element = html_entity_decode($element, ENT_COMPAT, 'UTF-8');
+ $element = trim(strip_tags(html_entity_decode($element, ENT_COMPAT, 'UTF-8')));
}
});
case 'QAPage':
case 'RealEstateListing':
case 'SearchResultsPage':
- case 'MediaGallery':
+ case 'MediaGallery':
case 'ImageGallery':
case 'VideoGallery':
case 'RadioEpisode':
case 'PerformingGroup':
case 'DanceGroup';
case 'MusicGroup':
- case 'TheaterGroup':
+ case 'TheaterGroup':
return self::parseJsonLdWebPerson($siteinfo, $jsonld);
case 'AudioObject':
case 'Audio':