X-Git-Url: http://git.shiar.nl/sc2-widget/blobdiff_plain/10f5d826fe537c83902e44108ab7a7903e4d8d79..21b89205cdef485ddc3d039e94ac791590bcff91:/getsc2clan diff --git a/getsc2clan b/getsc2clan index 1fbdd02..86cb3b8 100755 --- a/getsc2clan +++ b/getsc2clan @@ -18,6 +18,7 @@ $profiles && @{$profiles} or die "Usage: $0 ... [...]\n"; my ($clanmatch) = map { $_ && qr/\A(?:$_)\z/i } join '|', @{$clanmatches || []}; +my @realmget = (profile => 2 => 1); # common request path for european data sub blizget { state $bliz = do { my @authdata = do './.blizzard.passwd.pl' and not $@ || $! @@ -40,7 +41,7 @@ sub blizget { # prefer deprecated interface to prevent costly ladder search my @ladderdata = map { - blizget(legacy => profile => 2 => 1 => $_ => 'ladders') + blizget(legacy => @realmget => $_ => 'ladders') } @{$profiles}; # merge relevant ladder data of all users @@ -54,10 +55,6 @@ for my $season (qw[ currentSeason previousSeason ]) { } my @ladders = ( - sort_by { $_->{season} } # season - nsort_by { - -($_->{ladder}->[0]->{wins} + $_->{ladder}->[0]->{losses}) - } # activity desc nsort_by { $_->{ladder}->[0]->{ladderId} } # stable order grep { !$clanmatch or @@ -70,20 +67,38 @@ my (@members, %memberidx); $memberidx{ $_->{id} } //= push(@members, $_) && $#members for map { $_->{characters}->@* } @ladders; +my @games; +for my $member (map { $_->{id} } @members) { + my $usergames = blizget(legacy => @realmget => $member => 'matches'); + for ($usergames->{matches}->@*) { + $_->{player} = $memberidx{$member}; + push @games, $_; + } +} + say JSON->new->canonical->pretty->encode({ 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}, - (season => -1) x ($_->{season} eq 'previousSeason'), - }} @ladders], + ladders => [ + map {{ + id => $_->{ladder}->[0]->{ladderId}, + 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}, + (season => -1) x ($_->{season} eq 'previousSeason'), + }} + sort_by { $_->{season} } # season + nsort_by { + -($_->{ladder}->[0]->{wins} + $_->{ladder}->[0]->{losses}) + } # activity desc + @ladders + ], members => [map { - blizget(metadata => profile => 2 => 1 => $_->{id}) + blizget(metadata => @realmget => $_->{id}) # lacks mmr, fav race (available in new api) } @members], + matches => [nsort_by { -$_->{date} } @games], }) =~ s/(?: \G \d,? | \[ ) \K \s+ (?=\d|\])/ /grx; # concat arrays of single digits