Redtube: Fix grabber
authorRalf Ertzinger <ralf@skytale.net>
Sat, 11 Feb 2012 17:18:31 +0000 (18:18 +0100)
committerRalf Ertzinger <ralf@skytale.net>
Sat, 11 Feb 2012 17:18:31 +0000 (18:18 +0100)
videosite/RedTubeGrabber.pm

index 4e05dfd..ef757cc 100644 (file)
@@ -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');