From 81d83a68cdb383992a2759dcfdcb08a4d79994ff Mon Sep 17 00:00:00 2001 From: wn_ Date: Sun, 17 Sep 2017 01:18:05 -0500 Subject: af_redditimgur: Use v.redd.it fallback URL when possible. --- plugins/af_redditimgur/init.php | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) (limited to 'plugins') diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index c872b429a..9d10c09be 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -159,7 +159,31 @@ class Af_RedditImgur extends Plugin { $poster_url = false; } - $source_stream = "https://v.redd.it/" . $matches[1] . "/DASH_600_K"; + // IMPORTANT: This assumes the article GUID is kept in "owner_uid,entry_guid" format, and + // Reddit feed entries will keep the element (so get_id returns it). + $feeditem_id = explode(",", $article["guid"])[1]; + $source_stream = false; + $j = json_decode(fetch_file_contents($article["link"].".json"), true); + + if ($j) { + foreach ($j as $listing) { + foreach ($listing["data"]["children"] as $child) { + // Found the child object corresponding to the article (e.g. same name+ID like "t3_70j63a"). + if ($child["data"]["name"] == $feeditem_id) { + try { + $source_stream = $child["data"]["media"]["reddit_video"]["fallback_url"]; + } + catch (Exception $e) { + } + break 2; + } + } + } + } + + if (!$source_stream) { + $source_stream = "https://v.redd.it/" . $matches[1] . "/DASH_600_K"; + } $this->handle_as_video($doc, $entry, $source_stream, $poster_url); $found = 1; -- cgit v1.2.3 From 8352d7c6cb88637073b50422a9c4708c48ec4572 Mon Sep 17 00:00:00 2001 From: wn_ Date: Sun, 17 Sep 2017 13:34:49 -0500 Subject: af_redditimgur: Rework retrieval of v.redd.it fallback URL. Use the v.redd.it redirects to identify the original Reddit post, whose JSON should have the fallback_url we're looking for. --- plugins/af_redditimgur/init.php | 52 +++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 15 deletions(-) (limited to 'plugins') diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index 9d10c09be..3a34b5d8c 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -159,23 +159,26 @@ class Af_RedditImgur extends Plugin { $poster_url = false; } - // IMPORTANT: This assumes the article GUID is kept in "owner_uid,entry_guid" format, and - // Reddit feed entries will keep the element (so get_id returns it). - $feeditem_id = explode(",", $article["guid"])[1]; + // Get original article URL from v.redd.it redirects + $source_article_url = $this->get_location($matches[0]); + _debug("Resolved ".$matches[0]." to ".$source_article_url, $debug); + $source_stream = false; - $j = json_decode(fetch_file_contents($article["link"].".json"), true); - - if ($j) { - foreach ($j as $listing) { - foreach ($listing["data"]["children"] as $child) { - // Found the child object corresponding to the article (e.g. same name+ID like "t3_70j63a"). - if ($child["data"]["name"] == $feeditem_id) { - try { - $source_stream = $child["data"]["media"]["reddit_video"]["fallback_url"]; - } - catch (Exception $e) { + + if ($source_article_url) { + $j = json_decode(fetch_file_contents($source_article_url.".json"), true); + + if ($j) { + foreach ($j as $listing) { + foreach ($listing["data"]["children"] as $child) { + if ($child["data"]["url"] == $matches[0]) { + try { + $source_stream = $child["data"]["media"]["reddit_video"]["fallback_url"]; + } + catch (Exception $e) { + } + break 2; } - break 2; } } } @@ -495,6 +498,25 @@ class Af_RedditImgur extends Plugin { return $content_type; } + private function get_location($url, $useragent = SELF_USER_AGENT) { + $location = false; + + if (function_exists("curl_init") && !defined("NO_CURL")) { + $ch = curl_init($url); + curl_setopt($ch, CURLOPT_TIMEOUT, 5); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_HEADER, true); + curl_setopt($ch, CURLOPT_NOBODY, true); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("open_basedir")); + curl_setopt($ch, CURLOPT_USERAGENT, $useragent); + + @curl_exec($ch); + $location = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); + } + + return $location; + } + /** * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ -- cgit v1.2.3 From b4b5236ec469bfc4b59d73b202864a6fa0c2c61e Mon Sep 17 00:00:00 2001 From: wn_ Date: Sun, 17 Sep 2017 13:56:57 -0500 Subject: af_redditimgur: use common header retrieval function --- plugins/af_redditimgur/init.php | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) (limited to 'plugins') diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index 3a34b5d8c..8074894fd 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -479,8 +479,8 @@ class Af_RedditImgur extends Plugin { } } - private function get_content_type($url, $useragent = SELF_USER_AGENT) { - $content_type = false; + private function get_header($url, $useragent = SELF_USER_AGENT, $header) { + $ret = false; if (function_exists("curl_init") && !defined("NO_CURL")) { $ch = curl_init($url); @@ -492,29 +492,18 @@ class Af_RedditImgur extends Plugin { curl_setopt($ch, CURLOPT_USERAGENT, $useragent); @curl_exec($ch); - $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE); + $ret = curl_getinfo($ch, $header); } - return $content_type; + return $ret; } - private function get_location($url, $useragent = SELF_USER_AGENT) { - $location = false; - - if (function_exists("curl_init") && !defined("NO_CURL")) { - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_TIMEOUT, 5); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_HEADER, true); - curl_setopt($ch, CURLOPT_NOBODY, true); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, !ini_get("open_basedir")); - curl_setopt($ch, CURLOPT_USERAGENT, $useragent); - - @curl_exec($ch); - $location = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL); - } + private function get_content_type($url, $useragent = SELF_USER_AGENT) { + return $this->get_header($url, $useragent, CURLINFO_CONTENT_TYPE); + } - return $location; + private function get_location($url, $useragent = SELF_USER_AGENT) { + return $this->get_header($url, $useragent, CURLINFO_EFFECTIVE_URL); } /** -- cgit v1.2.3