<?php
/**
- * @copyright Copyright (C) 2010-2021, the Friendica project
+ * @copyright Copyright (C) 2010-2022, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
public static function getContentType(string $url)
{
$curlResult = DI::httpClient()->head($url);
+
+ // Workaround for systems that can't handle a HEAD request
+ if (!$curlResult->isSuccess() && ($curlResult->getReturnCode() == 405)) {
+ $curlResult = DI::httpClient()->get($url, [HttpClientOptions::CONTENT_LENGTH => 1000000]);
+ }
+
if (!$curlResult->isSuccess()) {
return [];
}
$contenttype = $curlResult->getHeader('Content-Type')[0] ?? '';
if (empty($contenttype)) {
- return [];
+ return ['application', 'octet-stream'];
}
return explode('/', current(explode(';', $contenttype)));
$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;
}
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;
*
* @param string $page_url
* @param array $siteinfo
- * @return void
+ * @return array
*/
private static function checkMedia(string $page_url, array $siteinfo) : array
{
}
}
+ $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]);