package local::nzbindex; require Exporter; use strict; use base "Exporter"; use URI::Escape; use XML::Parser; use XML::SimpleObject; use LWP::UserAgent; use HTTP::Cookies; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; # my $self = $class->SUPER::new(@_); my $self=bless {@_}, $class; return $self; } sub http_fetch { my $self=shift; my ($request)=@_; my $ua = LWP::UserAgent->new; $ua->timeout(10); # my $cookie_jar = HTTP::Cookies->new({}); # $ua->cookie_jar($cookie_jar); # my $response = $ua->get("http://www.nzbindex.nl/?lang=2"); my $response = $ua->get('https://www.nzbindex.nl/rss/?'.$request); if ($response->is_success) { return $response->decoded_content; } else { return; die $response->status_line; } } sub search { my $self=shift; my %params=@_; my @result; my $request=''; for my $key (keys %params) { $request.= uri_escape_utf8($key)."=".$params{$key}.'&'; } $request =~ s/\&$//; my $feed = $self->http_fetch($request); die "Couldn't get connect to search site" unless defined $feed; my $p1 = new XML::Parser(Style => 'Tree'); my $xso = XML::SimpleObject->new($p1->parse($feed)); if ($xso->child('rss')->child('channel')) { print CGI::start_table(); foreach my $item ($xso->child('rss')->child('channel')->children('item')) { next if not $item; my $title = $item->child('title')->value; my $description = $item->child('description')->value; my $nzburl = $item->child('enclosure')->attribute("url"); push @result,{url=>$nzburl,title=>$title,description=>$description}; } } return @result; }