line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Games::WoW::Armory; |
2
|
|
|
|
|
|
|
|
3
|
3
|
|
|
3
|
|
71284
|
use warnings; |
|
3
|
|
|
|
|
7
|
|
|
3
|
|
|
|
|
109
|
|
4
|
3
|
|
|
3
|
|
18
|
use strict; |
|
3
|
|
|
|
|
5
|
|
|
3
|
|
|
|
|
94
|
|
5
|
3
|
|
|
3
|
|
15
|
use Carp; |
|
3
|
|
|
|
|
8
|
|
|
3
|
|
|
|
|
288
|
|
6
|
3
|
|
|
3
|
|
16
|
use base qw(Class::Accessor::Fast); |
|
3
|
|
|
|
|
4
|
|
|
3
|
|
|
|
|
2931
|
|
7
|
3
|
|
|
3
|
|
15701
|
use LWP::UserAgent; |
|
3
|
|
|
|
|
168382
|
|
|
3
|
|
|
|
|
103
|
|
8
|
3
|
|
|
3
|
|
12720
|
use XML::Simple; |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
use Data::Dumper; |
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
__PACKAGE__->mk_accessors( |
12
|
|
|
|
|
|
|
qw(character url team guild) |
13
|
|
|
|
|
|
|
); |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
our $VERSION = '0.0.7_1'; |
16
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
=head1 NAME |
18
|
|
|
|
|
|
|
|
19
|
|
|
|
|
|
|
Games::WoW::Armory - Access to the WoW Armory |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
|
22
|
|
|
|
|
|
|
=head1 SYNOPSIS |
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
use Games::WoW::Armory; |
25
|
|
|
|
|
|
|
|
26
|
|
|
|
|
|
|
my $armory = Games::WoW::Armory->new(); |
27
|
|
|
|
|
|
|
$armory->search_character( { realm => 'Elune', |
28
|
|
|
|
|
|
|
character => 'Aarnn', |
29
|
|
|
|
|
|
|
country => 'EU } ); |
30
|
|
|
|
|
|
|
print $armory->character->name; |
31
|
|
|
|
|
|
|
print $armory->character->race; |
32
|
|
|
|
|
|
|
print $armory->character->level; |
33
|
|
|
|
|
|
|
|
34
|
|
|
|
|
|
|
=head2 METHOD |
35
|
|
|
|
|
|
|
|
36
|
|
|
|
|
|
|
=head3 fetch_data |
37
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
Fetch the data, and store the result in $self->{data} |
39
|
|
|
|
|
|
|
|
40
|
|
|
|
|
|
|
=head3 search_character |
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
Search a character. Required params: |
43
|
|
|
|
|
|
|
|
44
|
|
|
|
|
|
|
realm | character | country |
45
|
|
|
|
|
|
|
realm : name of the realm |
46
|
|
|
|
|
|
|
character : name of a character |
47
|
|
|
|
|
|
|
country : name of the country (EU|US) |
48
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
List of accessor for character: |
50
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
=over 4 |
52
|
|
|
|
|
|
|
|
53
|
|
|
|
|
|
|
=item * name: character name |
54
|
|
|
|
|
|
|
|
55
|
|
|
|
|
|
|
=item * guildName: guild name |
56
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
=item * arenaTeams: list of teams the character is in. Each team in the array is a Games::WoW::Armory::Team object |
58
|
|
|
|
|
|
|
|
59
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
foreach my $team (@{$armory->character->arenaTeams}){ |
61
|
|
|
|
|
|
|
print $team->name; |
62
|
|
|
|
|
|
|
foreach my $char (@{$team}){ |
63
|
|
|
|
|
|
|
print $char->name . " " . $char->race; |
64
|
|
|
|
|
|
|
} |
65
|
|
|
|
|
|
|
} |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
|
68
|
|
|
|
|
|
|
=item * battleGroup: the battlegroup name |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
=item * realm: realm name |
71
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
=item * race: race name |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
=item * gender: gender of the character |
75
|
|
|
|
|
|
|
|
76
|
|
|
|
|
|
|
=item * faction: faction the character belongs to |
77
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
=item * level: level of the character |
79
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
=item * lastModified: |
81
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
=item * title: highest rank in the old PVP mode |
83
|
|
|
|
|
|
|
|
84
|
|
|
|
|
|
|
=item * class: class name |
85
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
=item * rank: rank |
87
|
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
=item * teamRank: rank in the team |
89
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
=item * seasonGamesPlayed: number of games played in the current season |
91
|
|
|
|
|
|
|
|
92
|
|
|
|
|
|
|
=item * seasonGamesWon: number of games win in the current season |
93
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
=item * heroic_access: list of heroic access for the character |
95
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
|
97
|
|
|
|
|
|
|
foreach my $key ( @{ $armory->character->heroic_access } ) { |
98
|
|
|
|
|
|
|
print "Have access to the $key.\n"; |
99
|
|
|
|
|
|
|
} |
100
|
|
|
|
|
|
|
|
101
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
=item * characterinfo: a hash with lot of informations about the character |
103
|
|
|
|
|
|
|
|
104
|
|
|
|
|
|
|
=item * skill: a hash with all the skill reputation |
105
|
|
|
|
|
|
|
|
106
|
|
|
|
|
|
|
=item * reputation: a hash with all the character reputation |
107
|
|
|
|
|
|
|
|
108
|
|
|
|
|
|
|
=back |
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
=head3 get_arena_teams |
111
|
|
|
|
|
|
|
|
112
|
|
|
|
|
|
|
Get arena teams for a player |
113
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
=head3 get_reputation |
115
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
Get reputation for a player |
117
|
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
=head3 search_guild |
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
Search for a guild. required params : |
121
|
|
|
|
|
|
|
|
122
|
|
|
|
|
|
|
realm | guild | country |
123
|
|
|
|
|
|
|
realm : name of the realm |
124
|
|
|
|
|
|
|
guild : name of the guild |
125
|
|
|
|
|
|
|
country : name of the country (EU|US) |
126
|
|
|
|
|
|
|
|
127
|
|
|
|
|
|
|
List of accessor for guild: |
128
|
|
|
|
|
|
|
|
129
|
|
|
|
|
|
|
=over 4 |
130
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
=item * realm: name of the realm |
132
|
|
|
|
|
|
|
|
133
|
|
|
|
|
|
|
=item * name: name of the guild |
134
|
|
|
|
|
|
|
|
135
|
|
|
|
|
|
|
=item * battleGroup: name of the battleGroup |
136
|
|
|
|
|
|
|
|
137
|
|
|
|
|
|
|
=item * members: array with all the member. Each member is a Games::WoW::Armory::Character object. |
138
|
|
|
|
|
|
|
|
139
|
|
|
|
|
|
|
=back |
140
|
|
|
|
|
|
|
|
141
|
|
|
|
|
|
|
foreach my $member (@{$armory->guild->members}){ |
142
|
|
|
|
|
|
|
print $member->name; |
143
|
|
|
|
|
|
|
} |
144
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
=head3 search_team |
146
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
Search for a team. required params : |
148
|
|
|
|
|
|
|
|
149
|
|
|
|
|
|
|
team | ts | battlegroup | country |
150
|
|
|
|
|
|
|
battlegroup : name of the battlegroup |
151
|
|
|
|
|
|
|
ts : type (2vs2 | 3vs3 | 5vs5) juste the number (eg: ts => 5) |
152
|
|
|
|
|
|
|
team : name of the team |
153
|
|
|
|
|
|
|
country : name of the country (EU|US) |
154
|
|
|
|
|
|
|
|
155
|
|
|
|
|
|
|
List of accessor for team: |
156
|
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
=over 4 |
158
|
|
|
|
|
|
|
|
159
|
|
|
|
|
|
|
=item * seasonGamesPlayed: number of games played this season |
160
|
|
|
|
|
|
|
|
161
|
|
|
|
|
|
|
=item * rating: |
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
=item * size: number of members in the team |
164
|
|
|
|
|
|
|
|
165
|
|
|
|
|
|
|
=item * battleGroup: name of the battlegroup |
166
|
|
|
|
|
|
|
|
167
|
|
|
|
|
|
|
=item * realm: name of the realm |
168
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
=item * lastSeasonRanking: ranking in the last season |
170
|
|
|
|
|
|
|
|
171
|
|
|
|
|
|
|
=item * factionId: faction ID, 0 for alliance, 1 for Horde |
172
|
|
|
|
|
|
|
|
173
|
|
|
|
|
|
|
=item * ranking: |
174
|
|
|
|
|
|
|
|
175
|
|
|
|
|
|
|
=item * name: name of the team |
176
|
|
|
|
|
|
|
|
177
|
|
|
|
|
|
|
=item * relevance: |
178
|
|
|
|
|
|
|
|
179
|
|
|
|
|
|
|
=item * seasonGamesWon: number of games won |
180
|
|
|
|
|
|
|
|
181
|
|
|
|
|
|
|
=item * members: team members in an array, all the members are a Games::WoW::Armory::Character object |
182
|
|
|
|
|
|
|
|
183
|
|
|
|
|
|
|
=back |
184
|
|
|
|
|
|
|
|
185
|
|
|
|
|
|
|
foreach my $member (@{$armory->team->members}){ |
186
|
|
|
|
|
|
|
print $member->name; |
187
|
|
|
|
|
|
|
} |
188
|
|
|
|
|
|
|
|
189
|
|
|
|
|
|
|
=head3 get_heroic_access |
190
|
|
|
|
|
|
|
|
191
|
|
|
|
|
|
|
Store in $self->character->heroic_access the list of keys the user can buy for the instances in heroic mode. |
192
|
|
|
|
|
|
|
|
193
|
|
|
|
|
|
|
=cut |
194
|
|
|
|
|
|
|
|
195
|
|
|
|
|
|
|
our $WOW_EUROPE = "http://eu.wowarmory.com/"; |
196
|
|
|
|
|
|
|
our $WOW_US = 'http://www.wowarmory.com/'; |
197
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
our $HEROIC_REPUTATIONS = { |
199
|
|
|
|
|
|
|
"Keepers of Time" => "Key of Time", |
200
|
|
|
|
|
|
|
"Lower City" => "Auchenai Key", |
201
|
|
|
|
|
|
|
"The Sha'tar" => "Warpforged Key", |
202
|
|
|
|
|
|
|
"Honor Hold" => "Flamewrought Key", |
203
|
|
|
|
|
|
|
"Thrallmar" => "Flamewrought Key", |
204
|
|
|
|
|
|
|
"Cenarion Expedition" => "Reservoir Key", |
205
|
|
|
|
|
|
|
}; |
206
|
|
|
|
|
|
|
|
207
|
|
|
|
|
|
|
sub fetch_data { |
208
|
|
|
|
|
|
|
my ( $self, $params ) = @_; |
209
|
|
|
|
|
|
|
$self->{ ua } = LWP::UserAgent->new() || croak $!; |
210
|
|
|
|
|
|
|
$self->{ ua }->agent( |
211
|
|
|
|
|
|
|
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1" |
212
|
|
|
|
|
|
|
); |
213
|
|
|
|
|
|
|
|
214
|
|
|
|
|
|
|
my $base_url; |
215
|
|
|
|
|
|
|
if ( $$params{ country } =~ /eu/i ) { |
216
|
|
|
|
|
|
|
$base_url = $WOW_EUROPE; |
217
|
|
|
|
|
|
|
} |
218
|
|
|
|
|
|
|
elsif ( $$params{ country } =~ /us/i ) { |
219
|
|
|
|
|
|
|
$base_url = $WOW_US; |
220
|
|
|
|
|
|
|
} |
221
|
|
|
|
|
|
|
else { |
222
|
|
|
|
|
|
|
croak "Unknow region code, please choose US or EU"; |
223
|
|
|
|
|
|
|
} |
224
|
|
|
|
|
|
|
|
225
|
|
|
|
|
|
|
if ( defined $$params{ team } ) { |
226
|
|
|
|
|
|
|
$self->url( $base_url |
227
|
|
|
|
|
|
|
. $$params{ xml } . "?r=" |
228
|
|
|
|
|
|
|
. $$params{ realm } . "&ts=" |
229
|
|
|
|
|
|
|
. $$params{ ts } . "&t=" |
230
|
|
|
|
|
|
|
. $$params{ team } ); |
231
|
|
|
|
|
|
|
|
232
|
|
|
|
|
|
|
} |
233
|
|
|
|
|
|
|
else { |
234
|
|
|
|
|
|
|
$self->url( $base_url |
235
|
|
|
|
|
|
|
. $$params{ xml } . "?r=" |
236
|
|
|
|
|
|
|
. $$params{ realm } . "&n=" |
237
|
|
|
|
|
|
|
. $$params{ name } ); |
238
|
|
|
|
|
|
|
|
239
|
|
|
|
|
|
|
} |
240
|
|
|
|
|
|
|
|
241
|
|
|
|
|
|
|
$self->{ resultat } = $self->{ ua }->get( $self->url ); |
242
|
|
|
|
|
|
|
|
243
|
|
|
|
|
|
|
$self->{ xp } = XML::Simple->new; |
244
|
|
|
|
|
|
|
$self->{ data } = $self->{ xp }->XMLin( $self->{ resultat }->content ); |
245
|
|
|
|
|
|
|
} |
246
|
|
|
|
|
|
|
|
247
|
|
|
|
|
|
|
sub search_character { |
248
|
|
|
|
|
|
|
my ( $self, $params ) = @_; |
249
|
|
|
|
|
|
|
|
250
|
|
|
|
|
|
|
my $xml = 'character-sheet.xml'; |
251
|
|
|
|
|
|
|
|
252
|
|
|
|
|
|
|
croak "you need to specify a character name" |
253
|
|
|
|
|
|
|
unless defined $$params{ character }; |
254
|
|
|
|
|
|
|
croak "you need to specify a realm" unless defined $$params{ realm }; |
255
|
|
|
|
|
|
|
croak "you need to specify a country name" |
256
|
|
|
|
|
|
|
unless defined $$params{ country }; |
257
|
|
|
|
|
|
|
|
258
|
|
|
|
|
|
|
$self->fetch_data( |
259
|
|
|
|
|
|
|
{ xml => $xml, |
260
|
|
|
|
|
|
|
realm => $$params{ realm }, |
261
|
|
|
|
|
|
|
name => $$params{ character }, |
262
|
|
|
|
|
|
|
country => $$params{ country } |
263
|
|
|
|
|
|
|
} |
264
|
|
|
|
|
|
|
); |
265
|
|
|
|
|
|
|
|
266
|
|
|
|
|
|
|
my $character = $self->{ data }{ characterInfo }{ character }; |
267
|
|
|
|
|
|
|
my $skill = $self->{ data }{ characterInfo }{ skillTab }; |
268
|
|
|
|
|
|
|
my $characterinfo = $self->{ data }{ characterInfo }{ characterTab }; |
269
|
|
|
|
|
|
|
|
270
|
|
|
|
|
|
|
$self->character( Games::WoW::Armory::Character->new ); |
271
|
|
|
|
|
|
|
$self->character->name( $$character{ name } ); |
272
|
|
|
|
|
|
|
$self->character->class( $$character{ class } ); |
273
|
|
|
|
|
|
|
$self->character->guildName( $$character{ guildName } ); |
274
|
|
|
|
|
|
|
|
275
|
|
|
|
|
|
|
$self->character->battleGroup( $$character{ battleGroup } ); |
276
|
|
|
|
|
|
|
$self->character->realm( $$character{ realm } ); |
277
|
|
|
|
|
|
|
$self->character->race( $$character{ race } ); |
278
|
|
|
|
|
|
|
$self->character->gender( $$character{ gender } ); |
279
|
|
|
|
|
|
|
$self->character->faction( $$character{ faction } ); |
280
|
|
|
|
|
|
|
$self->character->level( $$character{ level } ); |
281
|
|
|
|
|
|
|
$self->character->lastModified( $$character{ lastModified } ); |
282
|
|
|
|
|
|
|
$self->character->title( $$character{ title } ); |
283
|
|
|
|
|
|
|
|
284
|
|
|
|
|
|
|
$self->character->skill( $skill ); |
285
|
|
|
|
|
|
|
$self->character->characterinfo( $characterinfo ); |
286
|
|
|
|
|
|
|
|
287
|
|
|
|
|
|
|
# Reputation information requires a separate XML file. |
288
|
|
|
|
|
|
|
$self->get_reputation( $params ); |
289
|
|
|
|
|
|
|
|
290
|
|
|
|
|
|
|
$self->get_arena_teams( $params ); |
291
|
|
|
|
|
|
|
} |
292
|
|
|
|
|
|
|
|
293
|
|
|
|
|
|
|
sub get_reputation { |
294
|
|
|
|
|
|
|
my ( $self, $params ) = @_; |
295
|
|
|
|
|
|
|
|
296
|
|
|
|
|
|
|
my $xml = 'character-reputation.xml'; |
297
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
croak "you need to specify a character name" |
299
|
|
|
|
|
|
|
unless defined $$params{ character }; |
300
|
|
|
|
|
|
|
croak "you need to specify a realm" unless defined $$params{ realm }; |
301
|
|
|
|
|
|
|
croak "you need to specify a country name" |
302
|
|
|
|
|
|
|
unless defined $$params{ country }; |
303
|
|
|
|
|
|
|
|
304
|
|
|
|
|
|
|
$self->fetch_data( |
305
|
|
|
|
|
|
|
{ xml => $xml, |
306
|
|
|
|
|
|
|
realm => $$params{ realm }, |
307
|
|
|
|
|
|
|
name => $$params{ character }, |
308
|
|
|
|
|
|
|
country => $$params{ country } |
309
|
|
|
|
|
|
|
} |
310
|
|
|
|
|
|
|
); |
311
|
|
|
|
|
|
|
|
312
|
|
|
|
|
|
|
my $reputation = $self->{ data }{ characterInfo }{ reputationTab }; |
313
|
|
|
|
|
|
|
$self->character->reputation( $reputation ); |
314
|
|
|
|
|
|
|
$self->get_heroic_access; |
315
|
|
|
|
|
|
|
} |
316
|
|
|
|
|
|
|
|
317
|
|
|
|
|
|
|
sub get_arena_teams { |
318
|
|
|
|
|
|
|
my ( $self, $params ) = @_; |
319
|
|
|
|
|
|
|
|
320
|
|
|
|
|
|
|
my $xml = 'character-arenateams.xml'; |
321
|
|
|
|
|
|
|
|
322
|
|
|
|
|
|
|
croak "you need to specify a character name" |
323
|
|
|
|
|
|
|
unless defined $$params{ character }; |
324
|
|
|
|
|
|
|
croak "you need to specify a realm" unless defined $$params{ realm }; |
325
|
|
|
|
|
|
|
croak "you need to specify a country name" |
326
|
|
|
|
|
|
|
unless defined $$params{ country }; |
327
|
|
|
|
|
|
|
|
328
|
|
|
|
|
|
|
$self->fetch_data( |
329
|
|
|
|
|
|
|
{ xml => $xml, |
330
|
|
|
|
|
|
|
realm => $$params{ realm }, |
331
|
|
|
|
|
|
|
name => $$params{ character }, |
332
|
|
|
|
|
|
|
country => $$params{ country } |
333
|
|
|
|
|
|
|
} |
334
|
|
|
|
|
|
|
); |
335
|
|
|
|
|
|
|
|
336
|
|
|
|
|
|
|
my $arena_team |
337
|
|
|
|
|
|
|
= $self->{data}{characterInfo}{character}{arenaTeams}{arenaTeam}; |
338
|
|
|
|
|
|
|
|
339
|
|
|
|
|
|
|
# XML::Simple will not divide team information up into keys |
340
|
|
|
|
|
|
|
# (based on team name) unless the character is a member of more |
341
|
|
|
|
|
|
|
# than one team. The following logic tries to figure this out: |
342
|
|
|
|
|
|
|
my @teams = ( exists $$arena_team{name} ) |
343
|
|
|
|
|
|
|
? ( $arena_team ) |
344
|
|
|
|
|
|
|
: map +{ %{$arena_team->{$_}}, name=>$_ }, (keys %{$arena_team}); |
345
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
my @team_objs; |
347
|
|
|
|
|
|
|
foreach my $team ( @teams ){ |
348
|
|
|
|
|
|
|
my $t = Games::WoW::Armory::Team->new; |
349
|
|
|
|
|
|
|
$t->name($$team{name}); |
350
|
|
|
|
|
|
|
$t->seasonGamesPlayed($$team{seasonGamesPlayed}); |
351
|
|
|
|
|
|
|
$t->size($$team{size}); |
352
|
|
|
|
|
|
|
$t->rating($$team{rating}); |
353
|
|
|
|
|
|
|
$t->battleGroup($$team{battleGroup}); |
354
|
|
|
|
|
|
|
$t->realm($$team{realm}); |
355
|
|
|
|
|
|
|
$t->lastSeasonRanking($$team{lastSeasonRanking}); |
356
|
|
|
|
|
|
|
$t->factionId($$team{factionId}); |
357
|
|
|
|
|
|
|
$t->ranking($$team{ranking}); |
358
|
|
|
|
|
|
|
$t->seasonGamesWon($$team{seasonGamesWon}); |
359
|
|
|
|
|
|
|
my @members; |
360
|
|
|
|
|
|
|
|
361
|
|
|
|
|
|
|
my $members = $$team{members}{character}; |
362
|
|
|
|
|
|
|
|
363
|
|
|
|
|
|
|
if (defined $members->{name} ) { my %hash = %$members ; delete $hash{name}; $members = { $members->{name} => \%hash } }; |
364
|
|
|
|
|
|
|
|
365
|
|
|
|
|
|
|
foreach my $member (keys %{$members}){ |
366
|
|
|
|
|
|
|
my $m = Games::WoW::Armory::Character->new; |
367
|
|
|
|
|
|
|
$m->name($member); |
368
|
|
|
|
|
|
|
$m->race($$members{$member}{race}); |
369
|
|
|
|
|
|
|
$m->seasonGamesPlayed($$members{$member}{seasonGamesPlayed}); |
370
|
|
|
|
|
|
|
$m->teamRank($$members{$member}{teamRank}); |
371
|
|
|
|
|
|
|
$m->race($$members{$member}{race}); |
372
|
|
|
|
|
|
|
$m->gender($$members{$member}{gender}); |
373
|
|
|
|
|
|
|
$m->seasonGamesWon($$members{$member}{seasonGamesWon}); |
374
|
|
|
|
|
|
|
$m->guildName($$members{$member}{guild}); |
375
|
|
|
|
|
|
|
$m->class($$members{$member}{class}); |
376
|
|
|
|
|
|
|
push @members, $m; |
377
|
|
|
|
|
|
|
} |
378
|
|
|
|
|
|
|
$t->members(\@members); |
379
|
|
|
|
|
|
|
push @team_objs, $t; |
380
|
|
|
|
|
|
|
} |
381
|
|
|
|
|
|
|
$self->character->arenaTeams( \@team_objs ); |
382
|
|
|
|
|
|
|
} |
383
|
|
|
|
|
|
|
|
384
|
|
|
|
|
|
|
sub search_guild { |
385
|
|
|
|
|
|
|
my ( $self, $params ) = @_; |
386
|
|
|
|
|
|
|
|
387
|
|
|
|
|
|
|
my $xml = "guild-info.xml"; |
388
|
|
|
|
|
|
|
|
389
|
|
|
|
|
|
|
croak "you need to specify a guild name" unless defined $$params{ guild }; |
390
|
|
|
|
|
|
|
croak "you need to specify a realm" unless defined $$params{ realm }; |
391
|
|
|
|
|
|
|
croak "you need to specify a country name" |
392
|
|
|
|
|
|
|
unless defined $$params{ country }; |
393
|
|
|
|
|
|
|
|
394
|
|
|
|
|
|
|
$self->fetch_data( |
395
|
|
|
|
|
|
|
{ xml => $xml, |
396
|
|
|
|
|
|
|
realm => $$params{ realm }, |
397
|
|
|
|
|
|
|
name => $$params{ guild }, |
398
|
|
|
|
|
|
|
country => $$params{ country } |
399
|
|
|
|
|
|
|
} |
400
|
|
|
|
|
|
|
); |
401
|
|
|
|
|
|
|
|
402
|
|
|
|
|
|
|
$self->guild( Games::WoW::Armory::Guild->new ); |
403
|
|
|
|
|
|
|
my $guild = $self->{ data }{ guildInfo }; |
404
|
|
|
|
|
|
|
my $members |
405
|
|
|
|
|
|
|
= $self->{ data }{ guildInfo }{ guild }{ members }{ character }; |
406
|
|
|
|
|
|
|
|
407
|
|
|
|
|
|
|
$self->guild->name( $$guild{ guildHeader }{ name } ); |
408
|
|
|
|
|
|
|
$self->guild->battleGroup( $$guild{ guildHeader }{ battleGroup } ); |
409
|
|
|
|
|
|
|
$self->guild->realm( $$guild{ guildHeader }{ realm } ); |
410
|
|
|
|
|
|
|
|
411
|
|
|
|
|
|
|
my @members; |
412
|
|
|
|
|
|
|
foreach my $member ( keys %{ $members } ) { |
413
|
|
|
|
|
|
|
my $m = Games::WoW::Armory::Character->new; |
414
|
|
|
|
|
|
|
$m->name( $member ); |
415
|
|
|
|
|
|
|
$m->level( $$members{ $member }{ level } ); |
416
|
|
|
|
|
|
|
$m->race( $$members{ $member }{ race } ); |
417
|
|
|
|
|
|
|
$m->class( $$members{ $member }{ class } ); |
418
|
|
|
|
|
|
|
$m->rank( $$members{ $member }{ rank } ); |
419
|
|
|
|
|
|
|
$m->gender( $$members{ $member }{ gender } ); |
420
|
|
|
|
|
|
|
push @members, $m; |
421
|
|
|
|
|
|
|
} |
422
|
|
|
|
|
|
|
$self->guild->members( \@members ); |
423
|
|
|
|
|
|
|
} |
424
|
|
|
|
|
|
|
|
425
|
|
|
|
|
|
|
sub search_team { |
426
|
|
|
|
|
|
|
my ( $self, $params ) = @_; |
427
|
|
|
|
|
|
|
|
428
|
|
|
|
|
|
|
my $xml = "team-info.xml"; |
429
|
|
|
|
|
|
|
croak "you need to specify a team name" unless defined $$params{ team }; |
430
|
|
|
|
|
|
|
croak "you need to specify a country name" |
431
|
|
|
|
|
|
|
unless defined $$params{ country }; |
432
|
|
|
|
|
|
|
croak "you need to specify a team style" unless defined $$params{ ts }; |
433
|
|
|
|
|
|
|
croak "you need to specify a realm name" |
434
|
|
|
|
|
|
|
unless defined $$params{ realm }; |
435
|
|
|
|
|
|
|
|
436
|
|
|
|
|
|
|
$self->fetch_data( |
437
|
|
|
|
|
|
|
{ xml => $xml, |
438
|
|
|
|
|
|
|
team => $$params{ team }, |
439
|
|
|
|
|
|
|
realm => $$params{ realm }, |
440
|
|
|
|
|
|
|
ts => $$params{ ts }, |
441
|
|
|
|
|
|
|
country => $$params{ country } |
442
|
|
|
|
|
|
|
} |
443
|
|
|
|
|
|
|
); |
444
|
|
|
|
|
|
|
|
445
|
|
|
|
|
|
|
my $arena_team = $self->{ data }{ teamInfo }{ arenaTeam }; |
446
|
|
|
|
|
|
|
my $members |
447
|
|
|
|
|
|
|
= $self->{ data }{ teamInfo }{ arenaTeam }{ members }{ character }; |
448
|
|
|
|
|
|
|
if (defined $members->{name} ) { my %hash = %$members ; delete $hash{name}; $members = { $members->{name} => \%hash } }; |
449
|
|
|
|
|
|
|
|
450
|
|
|
|
|
|
|
$self->team( Games::WoW::Armory::Team->new() ); |
451
|
|
|
|
|
|
|
$self->team->seasonGamesPlayed( $$arena_team{ seasonGamesPlayed } ); |
452
|
|
|
|
|
|
|
$self->team->rating( $$arena_team{ rating } ); |
453
|
|
|
|
|
|
|
$self->team->size( $$arena_team{ size } ); |
454
|
|
|
|
|
|
|
$self->team->battleGroup( $$arena_team{ battleGroup } ); |
455
|
|
|
|
|
|
|
$self->team->realm( $$arena_team{ realm } ); |
456
|
|
|
|
|
|
|
$self->team->lastSeasonRanking( $$arena_team{ lastSeasonRanking } ); |
457
|
|
|
|
|
|
|
$self->team->factionId( $$arena_team{ factionId } ); |
458
|
|
|
|
|
|
|
$self->team->ranking( $$arena_team{ ranking } ); |
459
|
|
|
|
|
|
|
$self->team->name( $$arena_team{ name } ); |
460
|
|
|
|
|
|
|
$self->team->relevance( $$arena_team{ relevance } ); |
461
|
|
|
|
|
|
|
$self->team->seasonGamesWon( $$arena_team{ seasonGamesWon } ); |
462
|
|
|
|
|
|
|
|
463
|
|
|
|
|
|
|
my @members; |
464
|
|
|
|
|
|
|
foreach my $member ( keys %{ $members } ) { |
465
|
|
|
|
|
|
|
my $m = Games::WoW::Armory::Character->new; |
466
|
|
|
|
|
|
|
$m->name( $member ); |
467
|
|
|
|
|
|
|
$m->class( $$members{ $member }{ class } ); |
468
|
|
|
|
|
|
|
$m->realm( $$members{ $member }{ realm } ); |
469
|
|
|
|
|
|
|
$m->battleGroup( $$members{ $member }{ battleGroup } ); |
470
|
|
|
|
|
|
|
$m->race( $$members{ $member }{ race } ); |
471
|
|
|
|
|
|
|
$m->gender( $$members{ $member }{ gender } ); |
472
|
|
|
|
|
|
|
$m->guildName( $$members{ $member }{ guild } ); |
473
|
|
|
|
|
|
|
push @members, $m; |
474
|
|
|
|
|
|
|
} |
475
|
|
|
|
|
|
|
$self->team->members( \@members ); |
476
|
|
|
|
|
|
|
} |
477
|
|
|
|
|
|
|
|
478
|
|
|
|
|
|
|
sub get_heroic_access { |
479
|
|
|
|
|
|
|
my $self = shift; |
480
|
|
|
|
|
|
|
|
481
|
|
|
|
|
|
|
my @heroic_array; |
482
|
|
|
|
|
|
|
foreach my $rep ( keys %{ $self->character->reputation } ) { |
483
|
|
|
|
|
|
|
foreach my $fac ( keys %{ $self->character->reputation->{ $rep } } ) { |
484
|
|
|
|
|
|
|
foreach my $city ( |
485
|
|
|
|
|
|
|
keys %{ $self->character->reputation->{ $rep }{ $fac }{ 'faction' } } ) |
486
|
|
|
|
|
|
|
{ |
487
|
|
|
|
|
|
|
foreach my $r ( keys %{ $HEROIC_REPUTATIONS } ) { |
488
|
|
|
|
|
|
|
if ( $r eq $city |
489
|
|
|
|
|
|
|
&& $self->character->reputation->{ $rep }{ $fac }{ 'faction' } |
490
|
|
|
|
|
|
|
{ $city }{ 'reputation' } >= 21000 ) |
491
|
|
|
|
|
|
|
{ |
492
|
|
|
|
|
|
|
push @heroic_array, $$HEROIC_REPUTATIONS{ $r }; |
493
|
|
|
|
|
|
|
} |
494
|
|
|
|
|
|
|
} |
495
|
|
|
|
|
|
|
} |
496
|
|
|
|
|
|
|
} |
497
|
|
|
|
|
|
|
} |
498
|
|
|
|
|
|
|
$self->character->heroic_access( \@heroic_array ); |
499
|
|
|
|
|
|
|
} |
500
|
|
|
|
|
|
|
|
501
|
|
|
|
|
|
|
=head1 BUGS AND LIMITATIONS |
502
|
|
|
|
|
|
|
|
503
|
|
|
|
|
|
|
Please report any bugs or feature requests to |
504
|
|
|
|
|
|
|
C<bug-games-wow-armory@rt.cpan.org>, or through the web interface at |
505
|
|
|
|
|
|
|
L<http://rt.cpan.org>. |
506
|
|
|
|
|
|
|
|
507
|
|
|
|
|
|
|
=head1 AUTHOR |
508
|
|
|
|
|
|
|
|
509
|
|
|
|
|
|
|
franck cuny C<< <franck.cuny@gmail.com> >> |
510
|
|
|
|
|
|
|
Andrew Yochum C<< <andrewyochum@gmail.com> >> |
511
|
|
|
|
|
|
|
|
512
|
|
|
|
|
|
|
=head1 LICENCE AND COPYRIGHT |
513
|
|
|
|
|
|
|
|
514
|
|
|
|
|
|
|
Copyright (c) 2007, franck cuny C<< <franck.cuny@gmail.com> >>. All rights reserved. |
515
|
|
|
|
|
|
|
|
516
|
|
|
|
|
|
|
This module is free software; you can redistribute it and/or |
517
|
|
|
|
|
|
|
modify it under the same terms as Perl itself. See L<perlartistic>. |
518
|
|
|
|
|
|
|
|
519
|
|
|
|
|
|
|
=cut |
520
|
|
|
|
|
|
|
|
521
|
|
|
|
|
|
|
1; |
522
|
|
|
|
|
|
|
|
523
|
|
|
|
|
|
|
package Games::WoW::Armory::Team; |
524
|
|
|
|
|
|
|
|
525
|
|
|
|
|
|
|
use base qw(Class::Accessor::Fast); |
526
|
|
|
|
|
|
|
|
527
|
|
|
|
|
|
|
__PACKAGE__->mk_accessors( |
528
|
|
|
|
|
|
|
qw(seasonGamesPlayed rating size battleGroup realm lastSeasonRanking factionId ranking name relevance seasonGamesWon members) |
529
|
|
|
|
|
|
|
); |
530
|
|
|
|
|
|
|
|
531
|
|
|
|
|
|
|
1; |
532
|
|
|
|
|
|
|
|
533
|
|
|
|
|
|
|
package Games::WoW::Armory::Guild; |
534
|
|
|
|
|
|
|
|
535
|
|
|
|
|
|
|
use base qw(Class::Accessor::Fast); |
536
|
|
|
|
|
|
|
|
537
|
|
|
|
|
|
|
__PACKAGE__->mk_accessors( qw(realm name battleGroup members) ); |
538
|
|
|
|
|
|
|
|
539
|
|
|
|
|
|
|
1; |
540
|
|
|
|
|
|
|
|
541
|
|
|
|
|
|
|
package Games::WoW::Armory::Character; |
542
|
|
|
|
|
|
|
|
543
|
|
|
|
|
|
|
use base qw(Class::Accessor::Fast); |
544
|
|
|
|
|
|
|
|
545
|
|
|
|
|
|
|
__PACKAGE__->mk_accessors( |
546
|
|
|
|
|
|
|
qw(name guildName arenaTeams battleGroup realm race gender faction level lastModified title class rank teamRank seasonGamesPlayed seasonGamesWon heroic_access characterinfo skill reputation) |
547
|
|
|
|
|
|
|
); |
548
|
|
|
|
|
|
|
|
549
|
|
|
|
|
|
|
1; |
550
|
|
|
|
|
|
|
|
551
|
|
|
|
|
|
|
__END__ |