Change new() function in plugins to avoid having to call _prepare_parameters() in...
[videosite.git] / videosite / DoubleVikingGrabber.pm
1 # Grabber for doubleviking.com
2 #
3 # (c) 2007 by Ralf Ertzinger <ralf@camperquake.de>
4 # licensed under GNU GPL v2
5
6 package videosite::DoubleVikingGrabber;
7
8 use videosite::GrabberBase;
9 @ISA = qw(videosite::GrabberBase);
10
11 use HTML::TokeParser;
12 use Data::Dumper;
13
14 use strict;
15
16 sub new {
17     my $class = shift;
18     my $self = $class->SUPER::new(
19         NAME => 'doubleviking',
20         PATTERNS => ['(http://(?:[-a-zA-Z0-9_.]+\.)*doubleviking.com/videos/(?:[-a-zA-Z0-9_ %]+/)*page0\.html/(\d+)\.html$)'],
21     );
22
23     return bless($self, $class);
24 }
25
26 sub _parse {
27     my $self = shift;
28     my $url = shift;
29     my $pattern = shift;
30     my $content;
31     my $metadata = {};
32     my $p;
33     my @accum;
34     my @text;
35     my $e;
36
37     $url =~ m|$pattern|;
38     $url = $1;
39
40     $metadata->{'URL'} = $url;
41     $metadata->{'ID'} = $2;
42     $metadata->{'TYPE'} = 'video';
43     $metadata->{'SOURCE'} = $self->{'NAME'};
44     $metadata->{'TITLE'} = undef;
45     $metadata->{'DLURL'} = undef;
46
47     unless(defined($content = $self->simple_get(sprintf('http://www.doubleviking.com/videos/page0.html/%s.html', $2)))) {
48         $self->error('Could not download %s', $url);
49         return undef;
50     }
51
52     $p = HTML::TokeParser->new(\$content);
53
54     # Look for the title
55     if ($p->get_tag('title')) {
56         $metadata->{'TITLE'} = $p->get_text();
57         $metadata->{'TITLE'} =~ s/^\s*(.*) - DoubleViking Video\s*$/$1/im;
58     }
59
60     # Look for the download URL
61     while ($e = $p->get_tag('embed')) {
62         if (exists($e->[1]{'flashvars'})) {
63             print Dumper \$e;
64             my $c = $e->[1]{'flashvars'};
65             if ($c =~ m|\&file=([^\&]+)\&|) {
66                 $metadata->{'DLURL'} = $1;
67             }
68         }
69     }
70
71     unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) {
72         $self->error('Could not determine download URL');
73         return undef;
74     }
75
76     return $metadata;
77 }
78
79 1;