#!/usr/bin/perl package xboxrevs; # xboxrevs.pl - get xbox reviews # TODO - refresh page cache use LWP::Simple; use HTML::Parser; use Data::Dumper; use strict; use vars qw{$linkpage $actuallink $searchterm $tagmatch}; my $revpage = get('http://www.teamxbox.com/reviews.php'); my $revpage2 = get('http://www.teamxbox.com/reviews.php?sort=&b=1'); my $cheatpage = get('http://www.teamxbox.com/cheats_data.php'); &get_revs; # {{{ starttag sub starttag { my($tagname, $attr) = @_; if (($tagname eq 'a') && ($attr->{href} =~ /$tagmatch\.php/)) { $linkpage = $attr->{href}; } } # }}} # {{{ endtag sub endtag { my($tagname) = @_; if ($tagname eq 'a') { } } # }}} # {{{ text sub text { my($text) = @_; if ($text =~ /$searchterm/i) { $actuallink = $linkpage; } } # }}} # {{{ get_revs sub get_revs { my $searchtype = shift; $searchterm = shift; my $page; $searchtype ||= 'review'; ($linkpage,$actuallink) = (undef,undef); if ($searchtype eq 'review') { $tagmatch = 'view_reviews'; $page = $revpage; } elsif ($searchtype eq 'cheat') { $tagmatch = 'gameinfo'; $page = $cheatpage; } &do_work($page); if ($actuallink) { return "$searchterm $searchtype at http://www.teamxbox.com/" . $actuallink; } elsif ($searchtype eq 'review') { &do_work($revpage2); if ($actuallink) { return "$searchterm $searchtype at http://www.teamxbox.com/" . $actuallink; } } return "No match found for $searchtype for $searchterm"; } sub do_work { my $html = shift; my $p = HTML::Parser->new( api_version => 3, start_h => [\&starttag, "tagname, attr"], end_h => [\&endtag, "tagname"], text_h => [\&text, "dtext"], marked_sections => 1 ); $p->parse($html); }