X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FRedTubeGrabber.pm;h=72036b837fd044152858d28347ed6ca66f2cb110;hb=13d23a6f19e2f8192d894171aaecc7987044a72a;hp=4e05dfd9f8d4df5801fbc95bf4b49b562ca38f41;hpb=771fcc7e7309dcb054d652812cead6b6bf47be5f;p=videosite.git diff --git a/videosite/RedTubeGrabber.pm b/videosite/RedTubeGrabber.pm index 4e05dfd..72036b8 100644 --- a/videosite/RedTubeGrabber.pm +++ b/videosite/RedTubeGrabber.pm @@ -18,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($$) { @@ -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(); - # Redtube uses a selfmade hash system to create the filename - ($dir, $hash) = mkfilename($metadata->{'ID'}); + if ($t =~ m|so\.addParam\("flashvars","([^\x22]+)"|) { + my %h; - $metadata->{'DLURL'} = sprintf('http://dl.redtube.com/_videos_t4vn23s9jc5498tgj49icfj4678/%s/%s.flv', $dir, $hash); + $self->debug("Found flashvars: %s", $1); + %h = map { $self->decode_hexurl($_) } split(/[&=]/, $1); + + $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');