diff options
author | wn_ <[email protected]> | 2017-09-17 13:34:49 -0500 |
---|---|---|
committer | wn_ <[email protected]> | 2017-09-17 13:41:08 -0500 |
commit | 8352d7c6cb88637073b50422a9c4708c48ec4572 (patch) | |
tree | 6e09c227b3f2068d062e6bca01555044053df3f6 | |
parent | 81d83a68cdb383992a2759dcfdcb08a4d79994ff (diff) |
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.
-rwxr-xr-x | plugins/af_redditimgur/init.php | 52 |
1 files changed, 37 insertions, 15 deletions
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 <id> 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) */ |