Spaces:
Paused
Paused
| // Determines total battle counts per format since the beginning of stats | |
| // collection in order to determine what the fallback dates for the importer's | |
| // `STATISTICS` map should be. | |
| 'use strict'; | |
| require('child_process').execSync('node ' + __dirname + "/../../build"); | |
| const Dex = require('../../sim/dex').Dex; | |
| global.toID = Dex.getId; | |
| const smogon = require('smogon'); | |
| const importer = require('./importer'); | |
| const formats = new Map(); | |
| for (let gen = 1; gen <= 9; gen++) { | |
| for (const tier of importer.TIERS) { | |
| const format = Dex.formats.get(`gen${gen}${tier}`); | |
| if (format.exists) { | |
| formats.set(format.id, {}); | |
| } | |
| } | |
| } | |
| (async () => { | |
| const index = await importer.fetch(smogon.Statistics.URL); | |
| const begin = new Date('Nov 2014'); | |
| const end = new Date(smogon.Statistics.latest(index)); | |
| end.setDate(end.getDate() + 1); | |
| for (const d = begin; d <= end; d.setMonth(d.getMonth() + 1)) { | |
| const month = `${d.getMonth() + 1}`.padStart(2, '0'); | |
| const date = `${1900 + d.getYear()}-${month}`; | |
| for (const format of formats.keys()) { | |
| try { | |
| // The JSON files are quite large and needing to download and parse them to then | |
| // extract the 'number of battles' field is much slower than instead grabbing the | |
| // basic stats file and doing the comparatively cheap regex search. | |
| const url = smogon.Statistics.url(date, format, 0).replace('chaos/', '').replace('.json', '.txt'); | |
| const usage = await importer.fetch(url); | |
| if (usage) { | |
| // https://www.smogon.com/stats/2016-10/cap-*.txt is invalid and doesn't match... *sigh* | |
| const m = usage.match(/^ Total battles: (.*)/); | |
| if (m) formats.get(format)[date] = Number(m[1]); | |
| } | |
| } catch (err) { | |
| if (!err.message.startsWith('HTTP 404')) throw err; | |
| } | |
| } | |
| } | |
| console.log(JSON.stringify(Array.from(formats.entries()), null, 2)); | |
| })().catch(err => console.error(err)); | |