From 863f20e50395e650cfa524adfeddc8132951c01a Mon Sep 17 00:00:00 2001 From: Ralf Ertzinger Date: Sat, 12 Jan 2008 22:26:22 +0100 Subject: [PATCH] - Add liveleak grabber --- videosite/LiveLeakGrabber.pm | 83 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 videosite/LiveLeakGrabber.pm diff --git a/videosite/LiveLeakGrabber.pm b/videosite/LiveLeakGrabber.pm new file mode 100644 index 0000000..4e49d44 --- /dev/null +++ b/videosite/LiveLeakGrabber.pm @@ -0,0 +1,83 @@ +# (c) 2007 by Ralf Ertzinger +# licensed under GNU GPL v2 +# +# Grabber for liveleak.com + +package LiveLeakGrabber; + +use GrabberBase; +@ISA = qw(GrabberBase); + +use LWP::Simple qw(!get); +use HTML::TokeParser; +use Data::Dumper; + +use strict; + +sub new { + my $class = shift; + my $self = $class->SUPER::new(); + + $self->{'NAME'} = 'liveleak'; + $self->{'PATTERNS'} = ['(http://(?:[-a-zA-Z0-9_.]+\.)*liveleak.com/view\?i=([^\&]+))']; + + 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; + + $url =~ m|$pattern|; + $url = $1; + + $metadata->{'URL'} = $url; + $metadata->{'ID'} = $2; + $metadata->{'TYPE'} = 'video'; + $metadata->{'SOURCE'} = $self->{'NAME'}; + $metadata->{'TITLE'} = undef; + $metadata->{'DLURL'} = undef; + + # Get the site to extract the title + unless(defined($content = LWP::Simple::get($url))) { + $self->error('Could not download page'); + return undef; + } + + $p = HTML::TokeParser->new(\$content); + + # Look for the title + if ($p->get_tag('title')) { + $metadata->{'TITLE'} = $p->get_text(); + $metadata->{'TITLE'} =~ s/^LiveLeak\.com\s+-\s+(.+)$/$1/im; + } + + # Get the file containing the video metadata + unless(defined($content = LWP::Simple::get(sprintf('http://www.liveleak.com/mi?token=%s', $2)))) { + $self->error('Could not download metadata'); + return undef; + } + + unless ($content =~ m/file_location=([^\&]+)\&/) { + $self->error('Could not find download URL'); + return undef; + } + $metadata->{'DLURL'} = $1; + $metadata->{'DLURL'} =~ s/%(..)/chr(hex($1))/ge; + + unless(defined($metadata->{'DLURL'}) && defined($metadata->{'TITLE'})) { + $self->error('Could not extract download URL and title'); + return undef; + } + + return $metadata; +} + +1; -- 1.8.3.1