use Data::Dump qw( pp );
use LWP::Authen::OAuth2;
-use JSON qw( decode_json encode_json );
+use JSON qw( decode_json );
+use List::Util qw( all );
my $profileid = 2138280;
-my $ladderid = 213977;
+my $clanmatch = 'Inno';
my $bliz = LWP::Authen::OAuth2->new(
client_id => '7f0f95ac9529474f854ee8d68a12c3e0',
return decode_json($json);
}
-my $ladder = blizget(profile => 2 => 1 => $profileid => ladder => $ladderid);
-my $team = $ladder->{ladderTeams}->[ $ladder->{ranksAndPools}->[0]->{rank} - 1 ];
+# find largest group consisting entirely of clan members
+# prefer deprecated interface to prevent costly ladder search
+my $ladders = blizget(legacy => profile => 2 => 1 => $profileid => 'ladders');
+my ($ladder) = (
+ sort { $b->{characters}->@* <=> $a->{characters}->@* } # population desc
+ grep { all { fc $_->{clanName} eq fc $clanmatch } $_->{characters}->@* } # members
+ $ladders->{currentSeason}->@*
+);
-say encode_json({
- league => $ladder->{currentLadderMembership}->{localizedGameMode},
- division => $ladder->{localizedDivision},
- mmr => $team->{mmr},
- members => $team->{teamMembers},
- members_ => [map { blizget(metadata => profile => 2 => 1 => $_->{id}) } $team->{teamMembers}->@*],
+say JSON->new->canonical->pretty->encode({
+ league => ucfirst lc $ladder->{ladder}->[0]->{league},
+ division => $ladder->{ladder}->[0]->{ladderName},
+ rank => $ladder->{ladder}->[0]->{rank},
+ tag => $ladder->{characters}->[0]->{clanTag},
+ members => [map { blizget(metadata => profile => 2 => 1 => $_->{id}) } $ladder->{characters}->@*],
+ # lacks mmr, fav race (available in new api)
});