Add data-fetch tool used to fetch unknown spell metadata from wowhead <3

This commit is contained in:
Melvin Valster
2019-07-25 15:50:36 +02:00
parent cf6c4ea7b1
commit 256118fd1a
9 changed files with 8330 additions and 11 deletions
+65
View File
@@ -0,0 +1,65 @@
// import '../src/types'
import { talentsById } from '../data/talents'
import fetch from 'node-fetch'
import fs from 'fs'
import cheerio from 'cheerio'
import spells from '../data/spells.json'
const getRankFromTooltip = (spellId: number, tooltip: string): number | null => {
const matches = tooltip.match(/Rank (\d)/)
if (!matches) {
console.warn(`Spell ${spellId}: No rank found in tooltip: \n\t`, tooltip)
return null
}
return parseInt(matches[1], 10)
}
const getUnknownSpellIds = (): number[] => {
const allSpellIds = Object.values(talentsById).reduce((reduction, talent: TalentData) => {
reduction = [...reduction, ...talent.ranks]
return reduction
}, [])
return allSpellIds.filter(spellId => !spells[spellId.toString()])
}
export const fetchSpellData = async () => {
const unknownSpellIds = getUnknownSpellIds()
console.log(`Fetching spell data for ${unknownSpellIds.length} unknown spells`)
const promises = unknownSpellIds.slice(0, 20).map(async (spellId): Promise<boolean> => {
if (!spells[spellId.toString()]) {
console.log(`Loading data for unknown spell: ${spellId}`)
const res = await fetch(`https://classic.wowhead.com/tooltip/spell/${spellId}`)
if (res.status !== 200) {
console.error(`Could not find data for spell: ${spellId}`)
return null
}
const json: any = await res.json()
const $ = cheerio.load(json.tooltip)
const spell: SpellData = {
name: json.name,
icon: json.icon,
rank: getRankFromTooltip(spellId, json.tooltip),
description: $('.q').text()
}
spells[spellId.toString()] = spell
return true
}
})
await Promise.all(promises)
fs.writeFileSync('./src/data/spells.json', JSON.stringify(spells, null, 2))
if (getUnknownSpellIds().length > 0) {
console.log('--- We have more unknown spells: ', getUnknownSpellIds().length)
fetchSpellData()
}
}
fetchSpellData()
+23
View File
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"target": "es6",
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": false,
"forceConsistentCasingInFileNames": true,
"module": "commonjs",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "preserve"
},
"include": [
"../types.d.ts"
],
"exclude": [
"../src/lib/foo.ts"
]
}