From fac041f3d3dcdf8fd29c63b6b709485872dc5edd Mon Sep 17 00:00:00 2001 From: alikia2x Date: Sun, 7 Sep 2025 00:51:31 +0800 Subject: [PATCH] update: the DB fix script --- src/fixCover.ts | 68 +++++++++++++++++++++++ src/{metadataArchive.ts => fixPubDate.ts} | 0 2 files changed, 68 insertions(+) create mode 100644 src/fixCover.ts rename src/{metadataArchive.ts => fixPubDate.ts} (100%) diff --git a/src/fixCover.ts b/src/fixCover.ts new file mode 100644 index 0000000..e95942c --- /dev/null +++ b/src/fixCover.ts @@ -0,0 +1,68 @@ +import arg from "arg"; +import { Database } from "bun:sqlite"; +import logger from "@core/log/logger"; +import type { VideoDetailsData } from "@core/net/bilibili.d.ts"; +import { sql } from "@core/index"; + +const quit = (reason?: string) => { + reason && logger.error(reason); + process.exit(); +}; + +const args = arg({ + "--db": String +}); + +const dbPath = args["--db"]; +if (!dbPath) { + quit("Missing --db "); +} + +const sqlite = new Database(dbPath); +const pg = sql; + +async function fixMissingCover() { + let fixQuery = ""; + let i = 0; + let j = 0; + const candidates = await pg` + SELECT aid + FROM + bilibili_metadata + WHERE + cover_url IS NULL + `; + const query = sqlite.query(`SELECT data FROM bili_info_crawl WHERE aid = $aid`); + for (const video of candidates) { + j++; + logger.log(`Progress: ${j}/${candidates.length}`); + const aid: number = video.aid; + try { + const sqliteData: any = query.get({ $aid: aid }); + const rawData: VideoDetailsData | null = JSON.parse(sqliteData.data); + if (!rawData) { + logger.warn(`Data not exists for aid: ${aid}`); + continue; + } + const coverURL = rawData.View.pic; + if (!coverURL) continue; + const q = `UPDATE bilibili_metadata SET cover_url = '${coverURL}' WHERE aid = ${aid};\n`; + logger.log(`Fixing cover for aid: ${aid}`); + i++; + fixQuery += q; + } catch (e) { + //logger.error(e as Error, undefined, aid.toString()); + logger.error(aid.toString()); + } + if (j % 1000 === 0) { + const bytes = await Bun.write("scripts/fix_2.sql", fixQuery); + logger.warn(`Wrote ${bytes} bytes`, "backup"); + } + } + logger.log(`Fixed ${i} videos, query length ${fixQuery.length}.`); + return fixQuery; +} + +const q = await fixMissingCover(); +await Bun.write("scripts/fix_2.sql", q); +quit(); diff --git a/src/metadataArchive.ts b/src/fixPubDate.ts similarity index 100% rename from src/metadataArchive.ts rename to src/fixPubDate.ts