feat: character list
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
import { join } from "node:path";
|
||||
import { $, MaybePromise, write } from "bun";
|
||||
import { createLogger } from "@/lib/logger";
|
||||
|
||||
const log = createLogger();
|
||||
fetch("https://gi.yatta.moe/api/v2/en/avatar")
|
||||
.then((a) => a.json())
|
||||
.then(async (a) => {
|
||||
const avatars = Object.keys(a.data.items);
|
||||
log`fetch complete, ${avatars.length} avatars`;
|
||||
const map = Object.fromEntries(
|
||||
(
|
||||
await asyncMap(avatars, (a) =>
|
||||
fetch(`https://gi.yatta.moe/api/v2/en/avatar/${a}`)
|
||||
.then((c) => c.text())
|
||||
.then((t) => {
|
||||
try {
|
||||
const c = JSON.parse(t);
|
||||
log`${c.data.route}`;
|
||||
return [a, c.data.other?.nameCard?.id] as const;
|
||||
} catch {
|
||||
log`${a}: ${t}`;
|
||||
return [];
|
||||
}
|
||||
}),
|
||||
)
|
||||
).filter((e) => e[1]),
|
||||
);
|
||||
log`crawling complete`;
|
||||
const target = join(__dirname, "../src/lib/namecards.ts");
|
||||
await write(
|
||||
target,
|
||||
`// GENERATED BY util/genNamecardRelation\n\nexport const CharacterNamecardMap: Record<string, number> = ${JSON.stringify(map)}`,
|
||||
);
|
||||
await $`bun biome format ${target} --fix`;
|
||||
});
|
||||
|
||||
async function asyncMap<S, R>(arr: S[], fn: (a: S) => MaybePromise<R>) {
|
||||
const res: R[] = [];
|
||||
for (const ent of arr) res.push(await fn(ent));
|
||||
return res;
|
||||
}
|
||||
Reference in New Issue
Block a user