Automatically add cookies gathered during grabbing to the metadata
[videosite.git] / videosite / GrabberBase.pm
1 # (c) 2007 by Ralf Ertzinger <ralf@camperquake.de>
2 # licensed under GNU GPL v2
3
4 package videosite::GrabberBase;
5 use videosite::Base;
6 use MIME::Base64;
7 use Data::Dumper;
8 @ISA = qw(videosite::Base);
9
10 use strict;
11
12 sub new {
13     my $class = shift;
14     my $self = $class->SUPER::new();
15
16     $self = {%{$self},
17         NAME => 'FlashGrab',
18         TYPE => 'grabber',
19         PATTERNS => [],
20     };
21     return bless($self, $class);
22 }
23
24 sub get($$) {
25     my $self = shift;
26     my $url = shift;
27     my $pattern;
28     my $res;
29
30     return undef unless $self->_getval('enabled');
31
32     foreach $pattern (@{$self->{'PATTERNS'}}) {
33         $self->debug("Matching %s against %s", $pattern, $url);
34         if ($url =~ m|$pattern|) {
35             $self->debug("Match");
36             foreach ($self->connectors()) {
37                 $self->debug("Using connector %s", $_->{'name'});
38                 $self->selectconn($_);
39                 $res = $self->_parse($url, $pattern);
40                 if (defined($res)) {
41                     $res->{'CONNECTOR'} = $_;
42                     last;
43                 }
44             }
45             if (defined($res)) {
46                 print Dumper($res);
47                 print Dumper($self->_cached_ua());
48                 if (defined($self->_cached_ua())) {
49                     $res->{COOKIES} = encode_base64("#LWP-Cookies-1.0\n" . $self->_cached_ua()->cookie_jar->as_string(), "");
50                 }
51             }
52
53             return wantarray?($res, $pattern):$res;
54         }
55     }
56
57     return undef;
58 }
59
60 sub enable {
61     my $self = shift;
62
63     $self->debug('Enabling %s grabber', $self->{'NAME'});
64     $self->setval('enabled', '1');
65 }
66
67 sub disable {
68     my $self = shift;
69
70     $self->debug('Disabling %s grabber', $self->{'NAME'});
71     $self->setval('enabled', '0');
72 }
73
74 sub _parse {
75     my $self = shift;
76     my $url = shift;
77
78     return undef;
79 }
80
81 sub _selftest {
82     my $self = shift;
83     my $info;
84
85     unless(exists($self->{_SELFTESTURL}) and exists($self->{_SELFTESTTITLE})) {
86         return 0;
87     }
88
89     unless(defined($info = $self->get($self->{_SELFTESTURL}))) {
90         $self->error("Could not get information from %s", $self->{_SELFTESTURL});
91         return undef;
92     }
93
94     unless($info->{TITLE} eq $self->{_SELFTESTTITLE}) {
95         $self->error("Title from info does not equal expected result (%s != %s)", $info->{TITLE}, $self->{_SELFTESTTITLE});
96         return undef;
97     }
98
99     return 1;
100 }
101
102 1;