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]+))'],
26 return bless($self, $class);
44 $metadata->{'URL'} = $url;
45 $metadata->{'ID'} = $2;
46 $metadata->{'TYPE'} = 'video';
47 $metadata->{'SOURCE'} = $self->{'NAME'};
48 $metadata->{'TITLE'} = undef;
49 $metadata->{'DLURL'} = undef;
51 unless(defined($content = $self->simple_get($url))) {
52 $self->error('Could not download %s', $url);
56 $p = HTML::TokeParser->new(\$content);
58 while ($e = $p->get_tag('div', 'param')) {
59 if (($e->[0] eq 'param') and exists($e->[1]->{name}) and ($e->[1]->{name} eq 'flashvars')) {
60 my %r = map { $self->decode_hexurl($_) } split(/[&=]/, $e->[1]->{value});
62 unless(exists($r{config})) {
63 $self->error("config URL not found in flashvars");
68 } elsif (($e->[0] eq 'div') and exists($e->[1]->{itemprop}) and ($e->[1]->{itemprop} eq 'name')) {
69 $metadata->{'TITLE'} = $p->get_phrase();
73 unless(defined($content = $self->simple_get($j))) {
74 $self->error("Could not download %s", $j);
78 $jsp = videosite::JSArrayParser->new();
79 $r = $jsp->parse($content);
81 foreach (@{$r->{playlist}}) {
82 if ($_->{eventCategory} eq 'Video') {
83 $metadata->{'DLURL'} = $_->{url};
88 unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) {
89 $self->error('Could not determine download URL');