summaryrefslogtreecommitdiff
path: root/app/routes/api.scrape-status.ts
diff options
context:
space:
mode:
authoryyamashita <yyamashita@mosquit.one>2026-05-06 22:24:38 +0900
committeryyamashita <yyamashita@mosquit.one>2026-05-06 22:24:38 +0900
commit538fd636e25595d88a958344d285c0e7cf44e530 (patch)
treeeb2999f355570224fa96877d5043af2ef3ec76ef /app/routes/api.scrape-status.ts
parentf817604858891edb79e26459dae884b158774db1 (diff)
Async scraping, scrape_logs, and CLI
Background scraping: - POST /api/scrape returns 202 immediately with run_id; scraping runs async - GET /api/scrape-status?run_id=xxx polls for results per venue - scrape_logs table: per-venue status (running/ok/error), events_saved, error, timestamps CLI (npm run scrape): - npm run scrape — 全会場をスクレイプ、結果を色付きで出力 - npm run scrape liquid-room — 特定会場のみ - npm run scrape -- --list — 登録済み会場一覧を表示 - エラー時は exit code 1 + エラーメッセージを dim 表示 Venues page: - 最終スクレイプ日時・成否をインラインで表示 - 会場ごとの「更新」ボタンを追加 Bug fix: upsertEvent に description/optional fields のデフォルト値を設定し better-sqlite3 の "Missing named parameter" エラーを解消 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'app/routes/api.scrape-status.ts')
-rw-r--r--app/routes/api.scrape-status.ts16
1 files changed, 16 insertions, 0 deletions
diff --git a/app/routes/api.scrape-status.ts b/app/routes/api.scrape-status.ts
new file mode 100644
index 0000000..28d08d4
--- /dev/null
+++ b/app/routes/api.scrape-status.ts
@@ -0,0 +1,16 @@
+/**
+ * GET /api/scrape-status?run_id=xxx — 指定 run_id の結果を返す
+ * GET /api/scrape-status — 最新 run の結果を返す
+ */
+import type { Route } from "./+types/api.scrape-status";
+import { getScrapeRunById, getLatestScrapeRun } from "~/lib/db.server";
+
+export async function loader({ request }: Route.LoaderArgs) {
+ const url = new URL(request.url);
+ const run_id = url.searchParams.get("run_id");
+
+ const logs = run_id ? getScrapeRunById(run_id) : getLatestScrapeRun();
+ const running = logs.some((l) => l.status === "running");
+
+ return Response.json({ running, results: logs });
+}