mirror of
https://github.com/misenhower/splatoon3.ink.git
synced 2026-03-21 17:54:13 -05:00
Merge pull request #32 from samuelthomas2774/fetch-fest-ranking-pages
Fetch all Splatfest ranking holders
This commit is contained in:
commit
b3442dff76
|
|
@ -2,6 +2,14 @@ import fs from 'fs/promises';
|
|||
import prefixedConsole from "../../common/prefixedConsole.mjs";
|
||||
import DataUpdater from "./DataUpdater.mjs";
|
||||
|
||||
function getFestId(id) {
|
||||
return Buffer.from(id, 'base64').toString().match(/^Fest-[A-Z]+:(.+)$/)?.[1] ?? id;
|
||||
}
|
||||
|
||||
function getFestTeamId(id) {
|
||||
return Buffer.from(id, 'base64').toString().match(/^FestTeam-[A-Z]+:((.+):(.+))$/)?.[1] ?? id;
|
||||
}
|
||||
|
||||
export default class FestivalRankingUpdater extends DataUpdater
|
||||
{
|
||||
name = 'FestivalRankingUpdater';
|
||||
|
|
@ -12,7 +20,7 @@ export default class FestivalRankingUpdater extends DataUpdater
|
|||
|
||||
this.festID = festID;
|
||||
this.endTime = endTime;
|
||||
this.filename += `.${region}.${festID}`;
|
||||
this.filename += `.${region}.${getFestId(festID)}`;
|
||||
}
|
||||
|
||||
imagePaths = [
|
||||
|
|
@ -25,7 +33,7 @@ export default class FestivalRankingUpdater extends DataUpdater
|
|||
];
|
||||
|
||||
get console() {
|
||||
this._console ??= prefixedConsole('Updater', this.region, this.name, this.festID);
|
||||
this._console ??= prefixedConsole('Updater', this.region, this.name, getFestId(this.festID));
|
||||
|
||||
return this._console;
|
||||
}
|
||||
|
|
@ -50,7 +58,30 @@ export default class FestivalRankingUpdater extends DataUpdater
|
|||
return false;
|
||||
}
|
||||
|
||||
getData(locale) {
|
||||
return this.splatnet(locale).getFestRankingData(this.festID);
|
||||
async getData(locale) {
|
||||
const data = await this.splatnet(locale).getFestRankingData(this.festID);
|
||||
|
||||
for (const team of data.data.fest.teams) {
|
||||
let pageInfo = team.result?.rankingHolders.pageInfo;
|
||||
|
||||
while (pageInfo.hasNextPage) {
|
||||
this.console.log('Fetching next page for team %s (%s), cursor %s',
|
||||
getFestTeamId(team.id), team.teamName, pageInfo.endCursor);
|
||||
|
||||
const page = await this.splatnet(locale).getFestRankingPage(team.id, pageInfo.endCursor);
|
||||
|
||||
team.result.rankingHolders = {
|
||||
edges: [
|
||||
...team.result.rankingHolders.edges,
|
||||
...page.data.node.result.rankingHolders.edges,
|
||||
],
|
||||
pageInfo: page.data.node.result.rankingHolders.pageInfo,
|
||||
};
|
||||
|
||||
pageInfo = page.data.node.result.rankingHolders.pageInfo;
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,8 +40,10 @@ export default class FestivalUpdater extends DataUpdater
|
|||
|
||||
Object.assign(node, detailResult.data.fest);
|
||||
|
||||
let rankingUpdater = new FestivalRankingUpdater(this.region, node.id, node.endTime);
|
||||
await rankingUpdater.updateIfNeeded();
|
||||
if (node.teams.find(t => t.result)) {
|
||||
let rankingUpdater = new FestivalRankingUpdater(this.region, node.id, node.endTime);
|
||||
await rankingUpdater.updateIfNeeded();
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
|
|||
|
|
@ -140,6 +140,10 @@ export default class SplatNet3Client
|
|||
return this.getGraphQLPersistedQuery(1, '4869de13d0d209032b203608cb598aef', { festId });
|
||||
}
|
||||
|
||||
getFestRankingPage(teamId, cursor) {
|
||||
return this.getGraphQLPersistedQuery(1, 'be2eb9e9b8dd680519eb59cc46c1a32b', { cursor, first: 25, id: teamId });
|
||||
}
|
||||
|
||||
getCurrentFestData() {
|
||||
return this.getGraphQLPersistedQuery(1, 'c0429fd738d829445e994d3370999764');
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user