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.