X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FGrabberBase.pm;h=44bde355e8e4481d5c93ad90700e498ca0bbd3e7;hb=1b803a8856b61ffde5e2c8f9e3f91ea3bcd6d01f;hp=eec5a332a6e5fa35267b16d9095fa80d208a486a;hpb=407c4a8c3008e4b8e5482d9d7806c17efbff099c;p=videosite.git diff --git a/videosite/GrabberBase.pm b/videosite/GrabberBase.pm index eec5a33..44bde35 100644 --- a/videosite/GrabberBase.pm +++ b/videosite/GrabberBase.pm @@ -1,15 +1,19 @@ # (c) 2007 by Ralf Ertzinger # licensed under GNU GPL v2 -package GrabberBase; -use Base; -@ISA = qw(Base); +package videosite::GrabberBase; +use videosite::Base; +use MIME::Base64; +use Data::Dumper; +@ISA = qw(videosite::Base); use strict; sub new { my $class = shift; - my $self = { + my $self = $class->SUPER::new(); + + $self = {%{$self}, NAME => 'FlashGrab', TYPE => 'grabber', PATTERNS => [], @@ -21,6 +25,7 @@ sub get($$) { my $self = shift; my $url = shift; my $pattern; + my $res; return undef unless $self->_getval('enabled'); @@ -28,7 +33,22 @@ sub get($$) { $self->debug("Matching %s against %s", $pattern, $url); if ($url =~ m|$pattern|) { $self->debug("Match"); - return $self->_parse($url, $pattern), $pattern; + foreach ($self->connectors()) { + $self->debug("Using connector %s", $_->{'name'}); + $self->selectconn($_); + $res = $self->_parse($url, $pattern); + if (defined($res)) { + $res->{'CONNECTOR'} = $_; + last; + } + } + if (defined($res)) { + if (defined($self->_cached_ua())) { + $res->{COOKIES} = encode_base64("#LWP-Cookies-1.0\n" . $self->_cached_ua()->cookie_jar->as_string(), ""); + } + } + + return wantarray?($res, $pattern):$res; } } @@ -56,4 +76,25 @@ sub _parse { return undef; } +sub _selftest { + my $self = shift; + my $info; + + unless(exists($self->{_SELFTESTURL}) and exists($self->{_SELFTESTTITLE})) { + return 0; + } + + unless(defined($info = $self->get($self->{_SELFTESTURL}))) { + $self->error("Could not get information from %s", $self->{_SELFTESTURL}); + return undef; + } + + unless($info->{TITLE} eq $self->{_SELFTESTTITLE}) { + $self->error("Title from info does not equal expected result (%s != %s)", $info->{TITLE}, $self->{_SELFTESTTITLE}); + return undef; + } + + return 1; +} + 1;