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