return $result;
}
- $siteinfo = ParseUrl::getSiteinfoCached($url);
+ $type = ParseUrl::getContentType($url);
- if (in_array($siteinfo['type'], ['image', 'video', 'audio'])) {
- switch ($siteinfo['type']) {
+ if (in_array($type, ['image', 'video', 'audio'])) {
+ switch ($type) {
case 'video':
$bbcode = "\n" . '[video]' . $url . '[/video]' . "\n";
break;
return $bbcode;
}
+ $siteinfo = ParseUrl::getSiteinfoCached($url);
+
unset($siteinfo['keywords']);
// Bypass attachment if parse url for a comment
}
if ($format == 'json') {
- $siteinfo = Util\ParseUrl::getSiteinfoCached($url);
+ $type = Util\ParseUrl::getContentType($url);
- if (empty($siteinfo['title']) && empty($siteinfo['text']) && empty($siteinfo['image'])
- && in_array($siteinfo['type'], ['image', 'video', 'audio'])) {
- switch ($siteinfo['type']) {
+ if (in_array($type, ['image', 'video', 'audio'])) {
+ switch ($type) {
case 'video':
$content_type = 'video';
break;
$ret['data'] = ['url' => $url];
$ret['success'] = true;
} else {
+ $siteinfo = Util\ParseUrl::getSiteinfoCached($url);
+
unset($siteinfo['keywords']);
$ret['data'] = $siteinfo;
*/
const MIN_DESC_COUNT = 100;
+ /**
+ * Fetch the content type of the given url
+ * @param string $url URL of the page
+ * @return string content type
+ */
+ public static function getContentType(string $url)
+ {
+ $curlResult = DI::httpRequest()->head($url);
+ if (!$curlResult->isSuccess()) {
+ return '';
+ }
+
+ $contenttype = $curlResult->getHeader('Content-Type');
+ if (empty($contenttype)) {
+ return '';
+ }
+
+ if (!preg_match('#(image|video|audio)/#i', $contenttype, $matches)) {
+ return '';
+ }
+
+ return array_pop($matches);
+ }
+
/**
* Search for chached embeddable data of an url otherwise fetch it
*