X-Git-Url: http://git.shiar.nl/sc2-widget/blobdiff_plain/300140a14ec496df0368af411e02c34551ee1aef..72f5c887236708189bf8cc86b60b932617c3c756:/getsc2clan diff --git a/getsc2clan b/getsc2clan index 6c02c0b..f3df754 100755 --- a/getsc2clan +++ b/getsc2clan @@ -12,9 +12,8 @@ my ($profileid, $clanmatch) = @ARGV; # clan host and name $profileid and $profileid =~ /\A\d+\z/ or die "Usage: $0 []\n"; -my $bliz = LWP::Authen::OAuth2->new( - client_id => '7f0f95ac9529474f854ee8d68a12c3e0', - client_secret => 'Kfa8n98UAaDo4brOeqxe9C2kJE9pqpSd', +my %auth = do './.blizzard.passwd.pl' or die "no auth setup: $!\n"; +my $bliz = LWP::Authen::OAuth2->new(%auth, token_endpoint => 'https://us.battle.net/oauth/token', request_required_params => [qw( client_id client_secret grant_type )], ); @@ -30,21 +29,36 @@ sub blizget { # 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 +my $ladderdata = blizget(legacy => profile => 2 => 1 => $profileid => 'ladders'); +my @ladders = ( + sort { + $b->{ladder}->[0]->{wins}+$b->{ladder}->[0]->{losses} <=> + $a->{ladder}->[0]->{wins}+$a->{ladder}->[0]->{losses} + } # activity desc grep { !$clanmatch or all { fc $_->{clanName} eq fc $clanmatch } $_->{characters}->@* } # members - $ladders->{currentSeason}->@* + grep { $_->{ladder}->[0]->{division} } + $ladderdata->{currentSeason}->@* ) or die "No matching groups found\n"; +my (@members, %memberidx); +$memberidx{ $_->{id} } //= push(@members, $_) && $#members + for map { $_->{characters}->@* } @ladders; 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) -}); + name => $members[0]->{clanName}, + tag => $members[0]->{clanTag}, + ladders => [map {{ + league => lc $_->{ladder}->[0]->{league}, + division => $_->{ladder}->[0]->{ladderName}, + rank => $_->{ladder}->[0]->{rank}, + members => [map { $memberidx{$_->{id}} } $_->{characters}->@*], + wins => $_->{ladder}->[0]->{wins}, + losses => $_->{ladder}->[0]->{losses}, + }} @ladders], + members => [map { + blizget(metadata => profile => 2 => 1 => $_->{id}) + # lacks mmr, fav race (available in new api) + } @members], +}) =~ s/(?: \G \d,? | \[ ) \K \s+ (?=\d|\])/ /grx; # concat arrays of single digits