| Games-WoW-Armory documentation | Contained in the Games-WoW-Armory distribution. |
Games::WoW::Armory - Access to the WoW Armory
use Games::WoW::Armory;
my $armory = Games::WoW::Armory->new();
$armory->search_character( { realm => 'Elune',
character => 'Aarnn',
country => 'EU } );
print $armory->character->name;
print $armory->character->race;
print $armory->character->level;
Fetch the data, and store the result in $self->{data}
Search a character. Required params:
realm | character | country realm : name of the realm character : name of a character country : name of the country (EU|US)
List of accessor for character:
foreach my $team (@{$armory->character->arenaTeams}){
print $team->name;
foreach my $char (@{$team}){
print $char->name . " " . $char->race;
}
}
foreach my $key ( @{ $armory->character->heroic_access } ) {
print "Have access to the $key.\n";
}
Get arena teams for a player
Get reputation for a player
Search for a guild. required params :
realm | guild | country realm : name of the realm guild : name of the guild country : name of the country (EU|US)
List of accessor for guild:
foreach my $member (@{$armory->guild->members}){
print $member->name;
}
Search for a team. required params :
team | ts | battlegroup | country battlegroup : name of the battlegroup ts : type (2vs2 | 3vs3 | 5vs5) juste the number (eg: ts => 5) team : name of the team country : name of the country (EU|US)
List of accessor for team:
foreach my $member (@{$armory->team->members}){
print $member->name;
}
Store in $self->character->heroic_access the list of keys the user can buy for the instances in heroic mode.
Please report any bugs or feature requests to
bug-games-wow-armory@rt.cpan.org, or through the web interface at
http://rt.cpan.org.
franck cuny <franck.cuny@gmail.com>
Andrew Yochum <andrewyochum@gmail.com>
Copyright (c) 2007, franck cuny <franck.cuny@gmail.com>. All rights reserved.
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
| Games-WoW-Armory documentation | Contained in the Games-WoW-Armory distribution. |
package Games::WoW::Armory; use warnings; use strict; use Carp; use base qw(Class::Accessor::Fast); use LWP::UserAgent; use XML::Simple; use Data::Dumper; __PACKAGE__->mk_accessors( qw(character url team guild) ); our $VERSION = '0.0.7';
our $WOW_EUROPE = "http://eu.wowarmory.com/"; our $WOW_US = 'http://www.wowarmory.com/'; our $HEROIC_REPUTATIONS = { "Keepers of Time" => "Key of Time", "Lower City" => "Auchenai Key", "The Sha'tar" => "Warpforged Key", "Honor Hold" => "Flamewrought Key", "Thrallmar" => "Flamewrought Key", "Cenarion Expedition" => "Reservoir Key", }; sub fetch_data { my ( $self, $params ) = @_; $self->{ ua } = LWP::UserAgent->new() || croak $!; $self->{ ua }->agent( "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" ); my $base_url; if ( $$params{ country } =~ /eu/i ) { $base_url = $WOW_EUROPE; } elsif ( $$params{ country } =~ /us/i ) { $base_url = $WOW_US; } else { croak "Unknow region code, please choose US or EU"; } if ( defined $$params{ team } ) { $self->url( $base_url . $$params{ xml } . "?r=" . $$params{ realm } . "&ts=" . $$params{ ts } . "&t=" . $$params{ team } ); } else { $self->url( $base_url . $$params{ xml } . "?r=" . $$params{ realm } . "&n=" . $$params{ name } ); } $self->{ resultat } = $self->{ ua }->get( $self->url ); $self->{ xp } = XML::Simple->new; $self->{ data } = $self->{ xp }->XMLin( $self->{ resultat }->content ); } sub search_character { my ( $self, $params ) = @_; my $xml = 'character-sheet.xml'; croak "you need to specify a character name" unless defined $$params{ character }; croak "you need to specify a realm" unless defined $$params{ realm }; croak "you need to specify a country name" unless defined $$params{ country }; $self->fetch_data( { xml => $xml, realm => $$params{ realm }, name => $$params{ character }, country => $$params{ country } } ); my $character = $self->{ data }{ characterInfo }{ character }; my $skill = $self->{ data }{ characterInfo }{ skillTab }; my $characterinfo = $self->{ data }{ characterInfo }{ characterTab }; $self->character( Games::WoW::Armory::Character->new ); $self->character->name( $$character{ name } ); $self->character->class( $$character{ class } ); $self->character->guildName( $$character{ guildName } ); $self->character->battleGroup( $$character{ battleGroup } ); $self->character->realm( $$character{ realm } ); $self->character->race( $$character{ race } ); $self->character->gender( $$character{ gender } ); $self->character->faction( $$character{ faction } ); $self->character->level( $$character{ level } ); $self->character->lastModified( $$character{ lastModified } ); $self->character->title( $$character{ title } ); $self->character->skill( $skill ); $self->character->characterinfo( $characterinfo ); # Reputation information requires a separate XML file. $self->get_reputation( $params ); $self->get_arena_teams( $params ); } sub get_reputation { my ( $self, $params ) = @_; my $xml = 'character-reputation.xml'; croak "you need to specify a character name" unless defined $$params{ character }; croak "you need to specify a realm" unless defined $$params{ realm }; croak "you need to specify a country name" unless defined $$params{ country }; $self->fetch_data( { xml => $xml, realm => $$params{ realm }, name => $$params{ character }, country => $$params{ country } } ); my $reputation = $self->{ data }{ characterInfo }{ reputationTab }; $self->character->reputation( $reputation ); $self->get_heroic_access; } sub get_arena_teams { my ( $self, $params ) = @_; my $xml = 'character-arenateams.xml'; croak "you need to specify a character name" unless defined $$params{ character }; croak "you need to specify a realm" unless defined $$params{ realm }; croak "you need to specify a country name" unless defined $$params{ country }; $self->fetch_data( { xml => $xml, realm => $$params{ realm }, name => $$params{ character }, country => $$params{ country } } ); my $arena_team = $self->{data}{characterInfo}{character}{arenaTeams}{arenaTeam}; # XML::Simple will not divide team information up into keys # (based on team name) unless the character is a member of more # than one team. The following logic tries to figure this out: my @teams = ( exists $$arena_team{name} ) ? ( $arena_team ) : map { $$arena_team{$_} } keys %{$arena_team}; my @team_objs; foreach my $team ( @teams ){ my $t = Games::WoW::Armory::Team->new; $t->name($$team{name}); $t->seasonGamesPlayed($$team{seasonGamesPlayed}); $t->size($$team{size}); $t->rating($$team{rating}); $t->battleGroup($$team{battleGroup}); $t->realm($$team{realm}); $t->lastSeasonRanking($$team{lastSeasonRanking}); $t->factionId($$team{factionId}); $t->ranking($$team{ranking}); $t->seasonGamesWon($$team{seasonGamesWon}); my @members; my $members = $$team{members}{character}; foreach my $member (keys %{$members}){ my $m = Games::WoW::Armory::Character->new; $m->name($member); $m->race($$members{$member}{race}); $m->seasonGamesPlayed($$members{$member}{seasonGamesPlayed}); $m->teamRank($$members{$member}{teamRank}); $m->race($$members{$member}{race}); $m->gender($$members{$member}{gender}); $m->seasonGamesWon($$members{$member}{seasonGamesWon}); $m->guildName($$members{$member}{guild}); $m->class($$members{$member}{class}); push @members, $m; } $t->members(\@members); push @team_objs, $t; } $self->character->arenaTeams( \@team_objs ); } sub search_guild { my ( $self, $params ) = @_; my $xml = "guild-info.xml"; croak "you need to specify a guild name" unless defined $$params{ guild }; croak "you need to specify a realm" unless defined $$params{ realm }; croak "you need to specify a country name" unless defined $$params{ country }; $self->fetch_data( { xml => $xml, realm => $$params{ realm }, name => $$params{ guild }, country => $$params{ country } } ); $self->guild( Games::WoW::Armory::Guild->new ); my $guild = $self->{ data }{ guildInfo }{ guild }; my $members = $self->{ data }{ guildInfo }{ guild }{ members }{ character }; $self->guild->name( $$guild{ name } ); $self->guild->battleGroup( $$guild{ battleGroup } ); $self->guild->realm( $$guild{ realm } ); my @members; foreach my $member ( keys %{ $members } ) { my $m = Games::WoW::Armory::Character->new; $m->name( $member ); $m->level( $$members{ $member }{ level } ); $m->race( $$members{ $member }{ race } ); $m->class( $$members{ $member }{ class } ); $m->rank( $$members{ $member }{ rank } ); $m->gender( $$members{ $member }{ gender } ); push @members, $m; } $self->guild->members( \@members ); } sub search_team { my ( $self, $params ) = @_; my $xml = "team-info.xml"; croak "you need to specify a team name" unless defined $$params{ team }; croak "you need to specify a country name" unless defined $$params{ country }; croak "you need to specify a team style" unless defined $$params{ ts }; croak "you need to specify a realm name" unless defined $$params{ realm }; $self->fetch_data( { xml => $xml, team => $$params{ team }, realm => $$params{ realm }, ts => $$params{ ts }, country => $$params{ country } } ); my $arena_team = $self->{ data }{ teamInfo }{ arenaTeam }; my $members = $self->{ data }{ teamInfo }{ arenaTeam }{ members }{ character }; $self->team( Games::WoW::Armory::Team->new() ); $self->team->seasonGamesPlayed( $$arena_team{ seasonGamesPlayed } ); $self->team->rating( $$arena_team{ rating } ); $self->team->size( $$arena_team{ size } ); $self->team->battleGroup( $$arena_team{ battleGroup } ); $self->team->realm( $$arena_team{ realm } ); $self->team->lastSeasonRanking( $$arena_team{ lastSeasonRanking } ); $self->team->factionId( $$arena_team{ factionId } ); $self->team->ranking( $$arena_team{ ranking } ); $self->team->name( $$arena_team{ name } ); $self->team->relevance( $$arena_team{ relevance } ); $self->team->seasonGamesWon( $$arena_team{ seasonGamesWon } ); my @members; foreach my $member ( keys %{ $members } ) { my $m = Games::WoW::Armory::Character->new; $m->name( $member ); $m->class( $$members{ $member }{ class } ); $m->realm( $$members{ $member }{ realm } ); $m->battleGroup( $$members{ $member }{ battleGroup } ); $m->race( $$members{ $member }{ race } ); $m->gender( $$members{ $member }{ gender } ); $m->guildName( $$members{ $member }{ guild } ); push @members, $m; } $self->team->members( \@members ); } sub get_heroic_access { my $self = shift; my @heroic_array; foreach my $rep ( keys %{ $self->character->reputation } ) { foreach my $fac ( keys %{ $self->character->reputation->{ $rep } } ) { foreach my $city ( keys %{ $self->character->reputation->{ $rep }{ $fac }{ 'faction' } } ) { foreach my $r ( keys %{ $HEROIC_REPUTATIONS } ) { if ( $r eq $city && $self->character->reputation->{ $rep }{ $fac }{ 'faction' } { $city }{ 'reputation' } >= 21000 ) { push @heroic_array, $$HEROIC_REPUTATIONS{ $r }; } } } } } $self->character->heroic_access( \@heroic_array ); }
1; package Games::WoW::Armory::Team; use base qw(Class::Accessor::Fast); __PACKAGE__->mk_accessors( qw(seasonGamesPlayed rating size battleGroup realm lastSeasonRanking factionId ranking name relevance seasonGamesWon members) ); 1; package Games::WoW::Armory::Guild; use base qw(Class::Accessor::Fast); __PACKAGE__->mk_accessors( qw(realm name battleGroup members) ); 1; package Games::WoW::Armory::Character; use base qw(Class::Accessor::Fast); __PACKAGE__->mk_accessors( qw(name guildName arenaTeams battleGroup realm race gender faction level lastModified title class rank teamRank seasonGamesPlayed seasonGamesWon heroic_access characterinfo skill reputation) ); 1; __END__