use strict; use warnings; use Data::Dumper; use LWP; use HTTP::Cookies; use HTTP::Request::Common; use HTML::TokeParser::Simple; my $save = shift or die "USAGE $0 [savefile]\n"; my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.001 (windows; U; NT4.0; en-us) Gecko/25250101'); $ua->cookie_jar({ file => $ENV{HOME} . '/.cookies.txt', autosave => 1 }); my $request = GET('http://www.chessgames.com'); my $response = $ua->request($request); my %game; my $parser = HTML::TokeParser::Simple->new(\$response->content); while (my $token = $parser->get_token) { next unless $token->is_comment; if ($token->as_is =~ /begintoday/) { $token = $parser->get_token; $game{date} = $token->as_is; } next unless $token->is_comment; if ($token->as_is =~ /begingameotd/) { $token = $parser->get_token; ($game{gid}) = $token->return_attr->{href} =~ /(\d+)$/; $token = $parser->get_token; $game{black} = $token->as_is; $token = $parser->get_token for 1..7; # evil, but works ($game{white}) = $token->as_is =~ /(\w+)/; $token = $parser->get_token for 1..4; # ditto $game{title} = $token->as_is; } } print Dumper \%game; $ua->mirror("http://www.chessgames.com/perl/nph-chesspgndownload?gid=$game{gid}",$save);