NAME

WWW::GoKGS - KGS Go Server (http://www.gokgs.com/) Scraper

SYNOPSIS

use WWW::GoKGS;

my $gokgs = WWW::GoKGS->new;

# Game archives
my $game_archives_1 = $gokgs->scrape( '/gameArchives.jsp?user=foo' );
my $game_archives_2 = $gokgs->game_archives->query( user => 'foo' );

# Top 100 players
my $top_100_1 = $gokgs->scrape( '/top100.jsp' );
my $top_100_2 = $gokgs->top_100->query;

# List of tournaments 
my $tourn_list_1 = $gokgs->scrape( '/tournList.jsp?year=2014' );
my $tourn_list_2 = $gokgs->tourn_list->query( year => 2014 );

# Information for the tournament
my $tourn_info_1 = $gokgs->scrape( '/tournInfo.jsp?id=123' );
my $tourn_info_2 = $gokgs->tourn_info->query( id => 123 );

# The tournament entrants
my $tourn_entrants_1 = $gokgs->scrape( '/tournEntrans.jsp?id=123&sort=n' );
my $tourn_entrants_2 = $gokgs->tourn_entrants->query( id => 123, sort => 'n' );

# The tournament games
my $tourn_games_1 = $gokgs->scrape( '/tournGames.jsp?id=123&round=1' );
my $tourn_games_2 = $gokgs->tourn_games->query( id => 123, round => 1 );

DESCRIPTION

This module is a KGS Go Server (http://www.gokgs.com/) scraper.

This class maps a URI preceded by http://www.gokgs.com/ to a proper scraper. The supported resources on KGS are as follows:

KGS Game Archives (http://www.gokgs.com/archives.jsp)

Handled by WWW::GoKGS::Scraper::GameArchives.

Top 100 KGS Players (http://www.gokgs.com/top100.jsp)

Handled by WWW::GoKGS::Scraper::Top100.

KGS Tournaments (http://www.gokgs.com/tournList.jsp)

Handled by WWW::GoKGS::Scraper::TournList, WWW::GoKGS::Scraper::TournInfo, WWW::GoKGS::Scraper::TournEntrants and WWW::GoKGS::Scraper::TournGames.

ATTRIBUTES

$UserAgent = $gokgs->user_agent

Returns an LWP::UserAgent object which is used to GET the requested resource. This attribute is read-only.

use LWP::UserAgent;

my $gokgs = WWW::GoKGS->new(
    user_agent => LWP::UserAgent->new(
        agent => 'MyAgent/1.00'
    )
);
$CodeRef = $gokgs->html_filter

Returns an HTML filter. Defaults to an anonymous subref which just returns the given argument (sub { $_[0] }). The callback is called with an HTML string. The return value is used as the filtered value. This attribute is read-only.

my $gokgs = WWW::GoKGS->new(
    html_filter => sub {
        my $html = shift;
        $html =~ s/<.*?>//g; # strip HTML tags
        $html;
    }
);
$CodeRef = $gokgs->date_filter

Returns a date filter. Defaults to an anonymous subref which just returns the given argument (sub { $_[0] }). The callback is called with a date string such as 2014-05-17T19:05Z. The return value is used as the filtered value. This attribute is read-only.

use Time::Piece qw/gmtime/;

my $gokgs = WWW::GoKGS->new(
    date_filter => sub {
        my $date = shift; # => "2014-05-17T19:05Z"
        gmtime->strptime( $date, '%Y-%m-%dT%H:%MZ' );
    }
);
$CodeRef = $gokgs->result_filter

Can be used to get or set a game result filter. Defaults to an anonymous subref which just returns the given argument (sub { $_[0] }). The callback is called with a game result string such as B+Resign. The return value is used as the filtered value. This attribute is read-only.

my $gokgs = WWW::GoKGS->new(
    result_filter => sub {
        my $result = shift; # => "B+Resign"

        # I prefer "B+R" to "B+Resign", 
        # while both of them are valid SGF-compatible format
        return 'B+R' if $result eq 'B+Resign';
        ...

        $result;
    }
);
$GameArchive = $gokgs->game_archives

Returns a WWW::GoKGS::Scraper::GameArchives object. This attribute is read-only.

$Top100 = $gokgs->top_100

Returns a WWW::GoKGS::Scraper::Top100 object. This attribute is read-only.

$TournList = $gokgs->tourn_list

Returns a WWW::GoKGS::Scraper::TournList object. This attribute is read-only.

$TournInfo = $gokgs->tourn_info

Returns a WWW::GoKGS::Scraper::TournInfo object. This attribute is read-only.

$TournEntrants = $gokgs->tourn_entrants

Returns a WWW::GoKGS::Scraper::TournEntrants object. This attribute is read-only.

$TournGames = $gokgs->tourn_games

Returns a WWW::GoKGS::Scraper::TournGames object. This attribute is read-only.

METHODS

$HashRef = $gokgs->scrape( '/gameArchives.jsp?user=foo' )
$HashRef = $gokgs->scrape( 'http://www.gokgs.com/gameArchives.jsp?user=foo' )

A shortcut for:

my $uri = URI->new( 'http://www.gokgs.com/gameArchives.jsp?user=foo' );
my $game_archives = $gokgs->game_archives->scrape( $uri );

See WWW::GoKGS::Scraper::GameArchives for details.

$HashRef = $gokgs->scrape( '/top100.jsp' )
$HashRef = $gokgs->scrape( 'http://www.gokgs.com/top100.jsp' )

A shortcut for:

my $uri = URI->new( 'http://www.gokgs.com/top100.jsp' );
my $top_100 = $gokgs->top_100->scrape( $uri );

See WWW::GoKGS::Scraper::Top100 for details.

$HashRef = $gokgs->scrape( '/tournList.jsp?year=2014' )
$HashRef = $gokgs->scrape( 'http://www.gokgs.com/tournList.jsp?year=2014' )

A shortcut for:

my $uri = URI->new( 'http://www.gokgs.com/tournList.jsp?year=2014' );
my $tourn_list = $gokgs->tourn_list->scrape( $uri );

See WWW::GoKGS::Scraper::TournList for details.

$HashRef = $gokgs->scrape( '/tournInfo.jsp?id=123' )
$HashRef = $gokgs->scrape( 'http://www.gokgs.com/tournInfo.jsp?id=123' )

A shortcut for:

my $uri = URI->new( 'http://www.gokgs.com/tournInfo.jsp?id=123' );
my $tourn_info = $gokgs->tourn_info->scrape( $uri );

See WWW::GoKGS::Scraper::TournInfo for details.

$HashRef = $gokgs->scrape( '/tournEntrants.jsp?id=123&s=n' )
$HashRef = $gokgs->scrape( 'http://www.gokgs.com/tournEntrants.jsp?id=123&s=n' )

A shortcut for:

my $uri = URI->new( 'http://www.gokgs.com/tournEntrants.jsp?id=123&s=n' );
my $tourn_entrants = $gokgs->tourn_entrants->scrape( $uri );

See WWW::GoKGS::Scraper::TournEntrants for details.

$HashRef = $gokgs->scrape( '/tournGames.jsp?id=123&round=1' )
$HashRef = $gokgs->scrape( 'http://www.gokgs.com/tournGames.jsp?id=123&round=1' )

A shortcut for:

my $uri = URI->new( 'http://www.gokgs.com/tournGames.jsp?id=123&round=1' );
my $tourn_games = $gokgs->tourn_games->scrape( $uri );

See WWW::GoKGS::Scraper::TournGames for details.

SEE ALSO

Web::Scraper

AUTHOR

Ryo Anazawa (anazawa@cpan.org)

LICENSE

This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.