import fs from 'fs' import axios from 'axios' import { IKanji, IRadical } from './shared' export const subjects = { data: [] as (IKanji | IRadical)[], filename: 'wanikani.json', load() { this.data = JSON.parse(fs.readFileSync(this.filename, 'utf-8')) return this.data }, dump(d: (IKanji | IRadical)[]) { this.data = d this.finalize() }, finalize() { fs.writeFileSync(this.filename, JSON.stringify(this.data)) } } async function main() { const wk = axios.create({ baseURL: 'https://api.wanikani.com/v2/', headers: { Authorization: `Bearer ${process.env['WANIKANI_API_KEY']}` } }) const data: (IKanji | IRadical)[] = [] let nextURL = '/subjects?types=radical,kanji' while (nextURL) { const r = await wk .get<{ pages: { next_url?: string } data: (IKanji | IRadical)[] }>(nextURL) .then((r) => r.data) data.push(...r.data) console.info(r.pages.next_url) nextURL = r.pages.next_url || '' } subjects.dump(data) } if (require.main === module) { main() }