X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FRedTubeGrabber.pm;h=72036b837fd044152858d28347ed6ca66f2cb110;hb=3255f6f448ae2e392871dc5241536b0dfb009a59;hp=2dda60c388421e3a0c88b9020900fd2a41e47e7f;hpb=64fb37c7b00e0a2757c0d690e7df0cd59afb28c2;p=videosite.git diff --git a/videosite/RedTubeGrabber.pm b/videosite/RedTubeGrabber.pm index 2dda60c..72036b8 100644 --- a/videosite/RedTubeGrabber.pm +++ b/videosite/RedTubeGrabber.pm @@ -6,13 +6,11 @@ # Algorithm for the file name hash reverse engineered by # Maximilian Rehkopf -package RedTubeGrabber; +package videosite::RedTubeGrabber; -use GrabberBase; -@ISA = qw(GrabberBase); +use videosite::GrabberBase; +@ISA = qw(videosite::GrabberBase); -use LWP::UserAgent; -use HTTP::Cookies; use HTML::TokeParser; use Data::Dumper; @@ -20,15 +18,15 @@ use strict; sub new { my $class = shift; - my $self = $class->SUPER::new(); - - $self->{'NAME'} = 'redtube'; - $self->{'PATTERNS'} = ['(http://(?:[-a-zA-Z0-9_.]+\.)*redtube.com/(\d+))']; - - bless($self, $class); - $self->_prepare_parameters(); - - return $self; + my $self = $class->SUPER::new( + NAME => 'redtube', + _SELFTESTURL => 'http://www.redtube.com/8269', + _SELFTESTTITLE => 'Porn bloopers with pretty girl', + PATTERNS => ['(http://(?:[-a-zA-Z0-9_.]+\.)*redtube.com/(\d+))'], + @_, + ); + + return bless($self, $class); } sub div($$) { @@ -72,12 +70,12 @@ sub _parse { my $self = shift; my $url = shift; my $pattern = shift; - my $jar = HTTP::Cookies->new(); - my $ua = LWP::UserAgent->new('agent' => 'Mozilla/5.0'); + my $ua = $self->ua(); my $content; my $metadata = {}; my $p; my $r; + my $tag; my $dir; my $hash; @@ -92,32 +90,38 @@ sub _parse { $metadata->{'DLURL'} = undef; # Set the cookies necessary to get the video data - $jar->set_cookie(undef, 'pp', '1', '/', '.redtube.com'); - $ua->cookie_jar($jar); + $ua->cookie_jar->set_cookie(undef, 'pp', '1', '/', '.redtube.com'); - unless(defined($r = $ua->get(sprintf("http://www.redtube.com/%s", $2)))) { + unless(defined($content = $self->simple_get(sprintf("http://www.redtube.com/%s", $2), $ua))) { $self->error('Could not download page'); return undef; } - # Get the site to extract the title - $content = $r->decoded_content(); - $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; + + $self->debug("Found flashvars: %s", $1); + %h = map { $self->decode_hexurl($_) } split(/[&=]/, $1); - # Redtube uses a selfmade hash system to create the filename - ($dir, $hash) = mkfilename($metadata->{'ID'}); + $self->debug("Decoded flashvars: %s", Dumper(\%h)); - $metadata->{'DLURL'} = sprintf('http://dl.redtube.com/_videos_t4vn23s9jc5498tgj49icfj4678/%s/%s.flv', $dir, $hash); + 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');