From 70ef81ffd5838c68a6d229b1c66fee5462bccb23 Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Sat, 11 Feb 2012 18:18:31 +0100 Subject: [PATCH] Redtube: Fix grabber --- videosite/RedTubeGrabber.pm | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/videosite/RedTubeGrabber.pm b/videosite/RedTubeGrabber.pm index 4e05dfd..ef757cc 100644 --- a/videosite/RedTubeGrabber.pm +++ b/videosite/RedTubeGrabber.pm @@ -75,6 +75,7 @@ sub _parse { my $metadata = {}; my $p; my $r; + my $tag; my $dir; my $hash; @@ -99,18 +100,28 @@ sub _parse { $p = HTML::TokeParser->new(\$content); # Look for the title - if ($p->get_tag('title')) { - my $t = $p->get_text(); - if ($t =~ /\xa0RedTube - /) { + while ($tag = $p->get_tag('title', 'script')) { + if ('title' eq $tag->[0]) { + my $t = $p->get_text(); $metadata->{'TITLE'} = $t; - $metadata->{'TITLE'} =~ s/\xa0RedTube - //; - } - } + $metadata->{'TITLE'} =~ s/ \| Redtube.*//; + } elsif ('script' eq $tag->[0]) { + my $t = $p->get_text(); + + if ($t =~ m|so\.addParam\("flashvars","([^\x22]+)"|) { + my %h; - # Redtube uses a selfmade hash system to create the filename - ($dir, $hash) = mkfilename($metadata->{'ID'}); + $self->debug("Found flashvars: %s", $1); + %h = map { $self->decode_hexurl($_) } split(/[&=]/, $1); - $metadata->{'DLURL'} = sprintf('http://dl.redtube.com/_videos_t4vn23s9jc5498tgj49icfj4678/%s/%s.flv', $dir, $hash); + $self->debug("Decoded flashvars: %s", Dumper(\%h)); + + if (exists($h{mp4_url})) { + $metadata->{'DLURL'} = $h{mp4_url}; + } + } + } + } unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) { $self->error('Could not extract download URL and title'); -- 1.8.3.1