Avoid double fetches

This commit is contained in:
Michael 2021-03-16 07:04:16 +00:00
parent 0a3d50a270
commit d498d15200
2 changed files with 54 additions and 38 deletions

View file

@ -62,11 +62,12 @@ class OEmbed
* *
* @param string $embedurl The URL from which the data should be fetched. * @param string $embedurl The URL from which the data should be fetched.
* @param bool $no_rich_type If set to true rich type content won't be fetched. * @param bool $no_rich_type If set to true rich type content won't be fetched.
* @param bool $use_parseurl Use the "ParseUrl" functionality to add additional data
* *
* @return \Friendica\Object\OEmbed * @return \Friendica\Object\OEmbed
* @throws \Friendica\Network\HTTPException\InternalServerErrorException * @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/ */
public static function fetchURL($embedurl, $no_rich_type = false) public static function fetchURL($embedurl, bool $no_rich_type = false, bool $use_parseurl = true)
{ {
$embedurl = trim($embedurl, '\'"'); $embedurl = trim($embedurl, '\'"');
@ -149,7 +150,9 @@ class OEmbed
} }
// Improve the OEmbed data with data from OpenGraph, Twitter cards and other sources // Improve the OEmbed data with data from OpenGraph, Twitter cards and other sources
if ($use_parseurl) {
$data = ParseUrl::getSiteinfoCached($embedurl, true, false); $data = ParseUrl::getSiteinfoCached($embedurl, true, false);
if (($oembed->type == 'error') && empty($data['title']) && empty($data['text'])) { if (($oembed->type == 'error') && empty($data['title']) && empty($data['text'])) {
return $oembed; return $oembed;
} }
@ -192,6 +195,7 @@ class OEmbed
$oembed->thumbnail_width = $data['images'][0]['width']; $oembed->thumbnail_width = $data['images'][0]['width'];
$oembed->thumbnail_height = $data['images'][0]['height']; $oembed->thumbnail_height = $data['images'][0]['height'];
} }
}
Hook::callAll('oembed_fetch_url', $embedurl, $oembed); Hook::callAll('oembed_fetch_url', $embedurl, $oembed);

View file

@ -241,7 +241,7 @@ class ParseUrl
$body = $curlResult->getBody(); $body = $curlResult->getBody();
if ($do_oembed) { if ($do_oembed) {
$oembed_data = OEmbed::fetchURL($url); $oembed_data = OEmbed::fetchURL($url, false, false);
if (!empty($oembed_data->type)) { if (!empty($oembed_data->type)) {
if (!in_array($oembed_data->type, ['error', 'rich', 'image', 'video', 'audio', ''])) { if (!in_array($oembed_data->type, ['error', 'rich', 'image', 'video', 'audio', ''])) {
@ -250,13 +250,25 @@ class ParseUrl
// See https://github.com/friendica/friendica/pull/5763#discussion_r217913178 // See https://github.com/friendica/friendica/pull/5763#discussion_r217913178
if ($siteinfo['type'] != 'photo') { if ($siteinfo['type'] != 'photo') {
if (isset($oembed_data->title)) { if (!empty($oembed_data->title)) {
$siteinfo['title'] = trim($oembed_data->title); $siteinfo['title'] = trim($oembed_data->title);
} }
if (isset($oembed_data->description)) { if (!empty($oembed_data->description)) {
$siteinfo['text'] = trim($oembed_data->description); $siteinfo['text'] = trim($oembed_data->description);
} }
if (isset($oembed_data->thumbnail_url)) { if (!empty($oembed_data->author_name)) {
$siteinfo['author_name'] = trim($oembed_data->author_name);
}
if (!empty($oembed_data->author_url)) {
$siteinfo['author_url'] = trim($oembed_data->author_url);
}
if (!empty($oembed_data->provider_name)) {
$siteinfo['publisher_name'] = trim($oembed_data->provider_name);
}
if (!empty($oembed_data->provider_url)) {
$siteinfo['publisher_url'] = trim($oembed_data->provider_url);
}
if (!empty($oembed_data->thumbnail_url)) {
$siteinfo['image'] = $oembed_data->thumbnail_url; $siteinfo['image'] = $oembed_data->thumbnail_url;
} }
} }