clan match using legacy ladder interface
authorMischa POSLAWSKY <perl@shiar.org>
Tue, 30 Apr 2019 20:36:38 +0000 (22:36 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 30 Apr 2019 20:38:25 +0000 (22:38 +0200)
widget.pl

index e302c109d798ca234881bb60b86b642026967768..1a4e5b5d3fe577171774d9b35718fd58688bb134 100644 (file)
--- a/widget.pl
+++ b/widget.pl
@@ -5,10 +5,11 @@ use utf8;
 
 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',
@@ -29,13 +30,20 @@ sub blizget {
        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)
 });