fix quoting in AsyncWgetFileGetter again
[videosite.git] / videosite / RedTubeGrabber.pm
index 4e05dfd..72036b8 100644 (file)
@@ -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');