diff --git a/plugins/af_redditimgur/init.php b/plugins/af_redditimgur/init.php index c872b429a..8074894fd 100755 --- a/plugins/af_redditimgur/init.php +++ b/plugins/af_redditimgur/init.php @@ -159,7 +159,34 @@ class Af_RedditImgur extends Plugin { $poster_url = false; } - $source_stream = "https://v.redd.it/" . $matches[1] . "/DASH_600_K"; + // 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; + + 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; + } + } + } + } + } + + 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; @@ -452,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); @@ -465,10 +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_content_type($url, $useragent = SELF_USER_AGENT) { + return $this->get_header($url, $useragent, CURLINFO_CONTENT_TYPE); + } + + private function get_location($url, $useragent = SELF_USER_AGENT) { + return $this->get_header($url, $useragent, CURLINFO_EFFECTIVE_URL); } /**