1 # (c) 2007 by Ralf Ertzinger <ralf@camperquake.de>
2 # licensed under GNU GPL v2
4 # Grabber for www.escapistmagazine.com/articles/view/editorials/zeropunctuation
6 package videosite::ZeroPunctuationGrabber;
8 use videosite::GrabberBase;
9 @ISA = qw(videosite::GrabberBase);
13 use videosite::JSArrayParser;
19 my $self = $class->SUPER::new(
20 NAME => 'zeropunctuation',
21 _SELFTESTURL => 'http://www.escapistmagazine.com/videos/view/zero-punctuation/5346-Amy',
22 _SELFTESTTITLE =>'Amy',
23 PATTERNS => ['(http://www.escapistmagazine.com/videos/view/zero-punctuation/([-A-Za-z0-9]+))'],
27 return bless($self, $class);
45 $metadata->{'URL'} = $url;
46 $metadata->{'ID'} = $2;
47 $metadata->{'TYPE'} = 'video';
48 $metadata->{'SOURCE'} = $self->{'NAME'};
49 $metadata->{'TITLE'} = undef;
50 $metadata->{'DLURL'} = undef;
52 unless(defined($content = $self->simple_get($url))) {
53 $self->error('Could not download %s', $url);
57 $p = HTML::TokeParser->new(\$content);
59 while ($e = $p->get_tag('div', 'param')) {
60 if (($e->[0] eq 'param') and exists($e->[1]->{name}) and ($e->[1]->{name} eq 'flashvars')) {
61 my %r = map { $self->decode_hexurl($_) } split(/[&=]/, $e->[1]->{value});
63 unless(exists($r{config})) {
64 $self->error("config URL not found in flashvars");
69 } elsif (($e->[0] eq 'div') and exists($e->[1]->{itemprop}) and ($e->[1]->{itemprop} eq 'name')) {
70 $metadata->{'TITLE'} = $p->get_phrase();
74 unless(defined($content = $self->simple_get($j))) {
75 $self->error("Could not download %s", $j);
79 $jsp = videosite::JSArrayParser->new();
80 $r = $jsp->parse($content);
82 foreach (@{$r->{playlist}}) {
83 if ($_->{eventCategory} eq 'Video') {
84 $metadata->{'DLURL'} = $_->{url};
89 unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) {
90 $self->error('Could not determine download URL');