Youtube: Allow short circuiting _parse_by_scrape if the video is non-saveable anyway
authorRalf Ertzinger <ralf@skytale.net>
Tue, 21 May 2013 08:11:38 +0000 (10:11 +0200)
committerRalf Ertzinger <ralf@skytale.net>
Tue, 21 May 2013 08:11:38 +0000 (10:11 +0200)
videosite/YouTubeGrabber.pm

index 28f5007..423184c 100644 (file)
@@ -96,15 +96,28 @@ sub _parse {
     $self->debug("Matched id %s from pattern %s", $id, $pattern);
 
     $res = $self->_parse_by_video_info($url, $id);
-    if (defined($res) && ref($res)) {
-        return $res;
+    if (defined($res)) {
+         if (ref($res)) {
+            return $res;
+         } else {
+             $self->debug("_parse_by_video_info failed with status noretry");
+             return undef;
+         }
     } else {
+        $self->debug("_parse_by_video_info failed with status retry");
         $res = $self->_parse_by_scrape($url, $id);
     }
 
     return $res;
 }
 
+#
+# Try to get video information by using the API call.
+#
+# Returns hashref on success
+# Returns undef on retryable error (try to scrape the website)
+# Returns 0 on non-retryable error 
+#
 sub _parse_by_video_info {
     my $self = shift;
     my $url = shift;
@@ -144,11 +157,19 @@ sub _parse_by_video_info {
     # Decode content
     $content = $self->decode_querystring($content);
 
+    $self->debug("Decoded get_video_info: %s", Dumper($content));
+
     if ($content->{'status'} ne 'ok') {
         $self->debug("Non OK status code found: %s", $content->{'status'});
         return undef;
     }
 
+    # Check if this is live content
+    if (exists($content->{ps}) and ($content->{ps} eq 'live')) {
+        $self->error("Video URL seems to point to a live stream, cannot save this");
+        return 0;
+    }
+
     if (exists($content->{'fmt_url_map'})) {
         # Decode fmt_url_map
         $urls = $self->decode_hexurl($content->{'fmt_url_map'});