+ Debug::log("Handling as Gfycat", Debug::$LOG_VERBOSE);
+
+ $source_stream = 'https://giant.gfycat.com/' . $matches[2] . '.mp4';
+ $poster_url = 'https://thumbs.gfycat.com/' . $matches[2] . '-mobile.jpg';
+
+ $content_type = $this->get_content_type($source_stream);
+
+ if (strpos($content_type, "video/") !== FALSE) {
+ $this->handle_as_video($doc, $entry, $source_stream, $poster_url);
+ $found = 1;
+ }
+ }
+
+ if (!$found && preg_match("/https?:\/\/v\.redd\.it\/(.*)$/i", $entry->getAttribute("href"), $matches)) {
+
+ Debug::log("Handling as reddit inline video", Debug::$LOG_VERBOSE);
+
+ $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::log("Resolved ".$matches[0]." to ".$source_article_url, Debug::$LOG_VERBOSE);
+
+ $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::log("Handling as Streamable", Debug::$LOG_VERBOSE);