From 9ec44345be36b9046162b44795f4f0d45835abe1 Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Tue, 21 May 2013 10:11:38 +0200 Subject: [PATCH] Youtube: Allow short circuiting _parse_by_scrape if the video is non-saveable anyway --- videosite/YouTubeGrabber.pm | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/videosite/YouTubeGrabber.pm b/videosite/YouTubeGrabber.pm index 28f5007..423184c 100644 --- a/videosite/YouTubeGrabber.pm +++ b/videosite/YouTubeGrabber.pm @@ -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'}); -- 1.8.3.1