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();
21 $self->{'NAME'} = 'zeropunctuation';
22 $self->{_SELFTESTURL} = 'http://www.escapistmagazine.com/videos/view/zero-punctuation/5346-Amy';
23 $self->{_SELFTESTTITLE} = 'Amy';
24 $self->{'PATTERNS'} = ['(http://www.escapistmagazine.com/videos/view/zero-punctuation/([-A-Za-z0-9]+))'];
27 $self->_prepare_parameters();
47 $metadata->{'URL'} = $url;
48 $metadata->{'ID'} = $2;
49 $metadata->{'TYPE'} = 'video';
50 $metadata->{'SOURCE'} = $self->{'NAME'};
51 $metadata->{'TITLE'} = undef;
52 $metadata->{'DLURL'} = undef;
54 unless(defined($content = $self->simple_get($url))) {
55 $self->error('Could not download %s', $url);
59 $p = HTML::TokeParser->new(\$content);
61 while ($e = $p->get_tag('div', 'param')) {
62 if (($e->[0] eq 'param') and exists($e->[1]->{name}) and ($e->[1]->{name} eq 'flashvars')) {
63 my %r = map { $self->decode_hexurl($_) } split(/[&=]/, $e->[1]->{value});
65 unless(exists($r{config})) {
66 $self->error("config URL not found in flashvars");
71 } elsif (($e->[0] eq 'div') and exists($e->[1]->{itemprop}) and ($e->[1]->{itemprop} eq 'name')) {
72 $metadata->{'TITLE'} = $p->get_phrase();
76 unless(defined($content = $self->simple_get($j))) {
77 $self->error("Could not download %s", $j);
81 $jsp = videosite::JSArrayParser->new();
82 $r = $jsp->parse($content);
84 foreach (@{$r->{playlist}}) {
85 if ($_->{eventCategory} eq 'Video') {
86 $metadata->{'DLURL'} = $_->{url};
91 unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) {
92 $self->error('Could not determine download URL');