private function inline_stuff($article, &$doc, $xpath, $debug = false) {
$entries = $xpath->query('(//a[@href]|//img[@src])');
+ $img_entries = $xpath->query("(//img[@src])");
$found = false;
}
}
+ if (!$found && preg_match("/https?:\/\/v\.redd\.it\/(.*)$/i", $entry->getAttribute("href"), $matches)) {
+
+ _debug("Handling as reddit inline video", $debug);
+
+ $img = $img_entries->item(0);
+
+ if ($img) {
+ $poster_url = $img->getAttribute("src");
+ } else {
+ $poster_url = false;
+ }
+
+ // 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;
+ }
+
if (!$found && preg_match("/https?:\/\/(www\.)?streamable.com\//i", $entry->getAttribute("href"))) {
_debug("Handling as Streamable", $debug);
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)
*/