X-Git-Url: https://git.camperquake.de/gitweb.cgi?a=blobdiff_plain;f=videosite%2FBroadcasterGrabber.pm;fp=videosite%2FBroadcasterGrabber.pm;h=8d0cda9ef3ee25d7cda99ebc7606e8946e63ca34;hb=24b7768511035a6793e01fc8da2fa245348e5d18;hp=0000000000000000000000000000000000000000;hpb=f92c6693b5f1159c26c9ea6ebe6e9af2660b6e62;p=videosite.git diff --git a/videosite/BroadcasterGrabber.pm b/videosite/BroadcasterGrabber.pm new file mode 100644 index 0000000..8d0cda9 --- /dev/null +++ b/videosite/BroadcasterGrabber.pm @@ -0,0 +1,86 @@ +# (c) 2007 by Ralf Ertzinger +# licensed under GNU GPL v2 +# +# Grabber for broadcaster.com + +package BroadcasterGrabber; + +use GrabberBase; +@ISA = qw(GrabberBase); + +use LWP::Simple qw(!get); +use HTML::Parser; +use Data::Dumper; + +use strict; + +sub new { + my $class = shift; + my $self = $class->SUPER::new(); + + $self->{'NAME'} = 'broadcaster'; + $self->{'PATTERNS'} = ['(http://(?:[-a-zA-Z0-9_.]+\.)*broadcaster\.com/clip/(\d+))']; + + bless($self, $class); + $self->_prepare_parameters(); + + return $self; +} + +sub _parse { + my $self = shift; + my $url = shift; + my $pattern = shift; + my $content; + my $metadata = {}; + my $p = HTML::Parser->new(api_version => 3); + my @accum; + my @text; + my $e; + + $url =~ m|$pattern|; + $url = $1; + + $metadata->{'URL'} = $url; + $metadata->{'ID'} = $2; + $metadata->{'TYPE'} = 'video'; + $metadata->{'SOURCE'} = $self->{'NAME'}; + $metadata->{'TITLE'} = undef; + $metadata->{'DLURL'} = undef; + + unless(defined($content = LWP::Simple::get(sprintf('http://www.broadcaster.com/clip/%s', $2)))) { + $self->error('Could not download %s', $url); + return undef; + } + + $p->handler(start => \@accum, "tagname, attr"); + $p->handler(text => \@text, "text"); + $p->report_tags(qw(script)); + $p->utf8_mode(1); + $p->parse($content); + + # Look for the title + foreach $e (@text) { + if ($e->[0] =~ m|\&page_title=([^\x22]+)\x22|s) { + $metadata->{'TITLE'} = $1; + last; + } + } + + # Look for the download URL + foreach $e (@text) { + if ($e->[0] =~ m|\&clip_loc=.+?cache.broadcaster.com.+?escape\(\x22([^\x22]+)\x22\)|s) { + $metadata->{'DLURL'} = 'http://cache.broadcaster.com/peoplecaster/' . $1; + last; + } + } + + unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) { + $self->error('Could not determine download URL'); + return undef; + } + + return $metadata; +} + +1;