Spaces:
Running
Running
// 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)); | |