summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorwn_ <[email protected]>2017-09-17 13:34:49 -0500
committerwn_ <[email protected]>2017-09-17 13:41:08 -0500
commit8352d7c6cb88637073b50422a9c4708c48ec4572 (patch)
tree6e09c227b3f2068d062e6bca01555044053df3f6 /plugins
parent81d83a68cdb383992a2759dcfdcb08a4d79994ff (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.
Diffstat (limited to 'plugins')
-rwxr-xr-xplugins/af_redditimgur/init.php52
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)
*/