From 831648e3c84ce50645f496e4628ed2a72bdccf10 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 24 Nov 2021 08:27:10 +0300 Subject: af_redditimgur: check content-type before downloading data for og:image and imgur pages --- plugins/af_redditimgur/init.php | 105 +++++++++++++++++++++++----------------- 1 file changed, 60 insertions(+), 45 deletions(-) (limited to 'plugins') diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index f40d21d35..8ec947b86 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -496,30 +496,38 @@ class Af_RedditImgur extends Plugin { Debug::log("handling as imgur page/whatever", Debug::LOG_VERBOSE); - $content = UrlHelper::fetch(["url" => $entry_href, - "http_accept" => "text/*"]); + $content_type = $this->get_content_type($entry_href); - if ($content) { - $cdoc = new DOMDocument(); + if ($content_type && strpos($content_type, "text/html") !== false) { - if (@$cdoc->loadHTML($content)) { - $cxpath = new DOMXPath($cdoc); + $content = UrlHelper::fetch(["url" => $entry_href, + "http_accept" => "text/*"]); - /** @var ?DOMElement $rel_image */ - $rel_image = $cxpath->query("//link[@rel='image_src']")->item(0); + if ($content) { + $cdoc = new DOMDocument(); - if ($rel_image) { + if (@$cdoc->loadHTML($content)) { + $cxpath = new DOMXPath($cdoc); - $img = $doc->createElement('img'); - $img->setAttribute("src", $rel_image->getAttribute("href")); + /** @var ?DOMElement $rel_image */ + $rel_image = $cxpath->query("//link[@rel='image_src']")->item(0); - $br = $doc->createElement('br'); - $entry->parentNode->insertBefore($img, $entry); - $entry->parentNode->insertBefore($br, $entry); + if ($rel_image) { + + $img = $doc->createElement('img'); + $img->setAttribute("src", $rel_image->getAttribute("href")); + + $br = $doc->createElement('br'); + $entry->parentNode->insertBefore($img, $entry); + $entry->parentNode->insertBefore($br, $entry); - $found = true; + $found = true; + } } } + + } else { + Debug::log("skipping imgur $entry_href because of content type: $content_type", Debug::LOG_VERBOSE); } } @@ -543,53 +551,60 @@ class Af_RedditImgur extends Plugin { if (!$found) { Debug::log("looking for meta og:image", Debug::LOG_VERBOSE); - $content = UrlHelper::fetch(["url" => $entry_href, - "http_accept" => "text/*"]); + $content_type = $this->get_content_type($entry_href); + + if ($content_type && strpos($content_type, "text/html") !== false) { - if ($content) { - $cdoc = new DOMDocument(); + $content = UrlHelper::fetch(["url" => $entry_href, + "http_accept" => "text/*"]); - if (@$cdoc->loadHTML($content)) { - $cxpath = new DOMXPath($cdoc); + if ($content) { + $cdoc = new DOMDocument(); - /** @var ?DOMElement $og_image */ - $og_image = $cxpath->query("//meta[@property='og:image']")->item(0); + if (@$cdoc->loadHTML($content)) { + $cxpath = new DOMXPath($cdoc); - /** @var ?DOMElement $og_video */ - $og_video = $cxpath->query("//meta[@property='og:video']")->item(0); + /** @var ?DOMElement $og_image */ + $og_image = $cxpath->query("//meta[@property='og:image']")->item(0); - if ($og_video) { + /** @var ?DOMElement $og_video */ + $og_video = $cxpath->query("//meta[@property='og:video']")->item(0); - $source_stream = $og_video->getAttribute("content"); + if ($og_video) { - if ($source_stream) { + $source_stream = $og_video->getAttribute("content"); - if ($og_image) { - $poster_url = $og_image->getAttribute("content"); - } else { - $poster_url = false; - } + if ($source_stream) { - $this->handle_as_video($doc, $entry, $source_stream, $poster_url); - $found = true; - } + if ($og_image) { + $poster_url = $og_image->getAttribute("content"); + } else { + $poster_url = false; + } - } else if ($og_image) { + $this->handle_as_video($doc, $entry, $source_stream, $poster_url); + $found = true; + } - $og_src = $og_image->getAttribute("content"); + } else if ($og_image) { - if ($og_src) { - $img = $doc->createElement('img'); - $img->setAttribute("src", $og_src); + $og_src = $og_image->getAttribute("content"); - $br = $doc->createElement('br'); - $entry->parentNode->insertBefore($img, $entry); - $entry->parentNode->insertBefore($br, $entry); + if ($og_src) { + $img = $doc->createElement('img'); + $img->setAttribute("src", $og_src); - $found = true; + $br = $doc->createElement('br'); + $entry->parentNode->insertBefore($img, $entry); + $entry->parentNode->insertBefore($br, $entry); + + $found = true; + } } } } + } else { + Debug::log("BODY: skipping $entry_href because of content type: $content_type", Debug::LOG_VERBOSE); } } } -- cgit v1.2.3