From be55729482296663da8c96723bfd22080e6762c1 Mon Sep 17 00:00:00 2001 From: yyamashita Date: Wed, 6 May 2026 22:07:53 +0900 Subject: Add Tokyo livehouse event aggregator service Full-stack React Router v7 app that scrapes event listings from major Tokyo live venues (Liquid Room, WWW/WWW X, Shibuya O-EAST, Shinjuku LOFT, Club Quattro) and stores them in SQLite for browsing and search. - Modular scraper architecture: add a new venue by dropping a file in app/scrapers/ and registering it in index.ts - Routes: /events (filter by keyword/venue/date), /events/:id, /venues, GET /api/scrape - EventCard shows artist, date/time, venue, ticket URL, and fee - Post-scrape per-venue Markdown files generated to events/ (dev reference) - /add-livehouse Claude Code skill defined in .claude/commands/ Co-Authored-By: Claude Sonnet 4.6 --- .claude/commands/add-livehouse.md | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 .claude/commands/add-livehouse.md (limited to '.claude') diff --git a/.claude/commands/add-livehouse.md b/.claude/commands/add-livehouse.md new file mode 100644 index 0000000..5aff417 --- /dev/null +++ b/.claude/commands/add-livehouse.md @@ -0,0 +1,66 @@ +# add-livehouse + +新しいライブハウスのスクレイパーを追加するスキル。 + +## 使い方 + +``` +/add-livehouse <会場名> +``` + +例: +``` +/add-livehouse "渋谷 WWW X" "https://www-shibuya.jp/schedule/" +``` + +## 実行手順 + +以下の手順を順番に実行する。 + +### 1. スクレイパーファイルの作成 + +`$ARGUMENTS` から会場名とURLを取得して、`app/scrapers/.ts` を作成する。 + +- `venue-id` はURLや会場名から小文字ハイフン区切りで生成(例: `shibuya-www-x`) +- 既存スクレイパー(例: `app/scrapers/liquid-room.ts`)を参考にして同じ構造で作成 +- `VenueMeta` に `id`, `name`, `url`, `area` を設定 +- `scrape()` メソッドで対象URLのHTMLを fetch → cheerio でパース → `EventInput[]` を返す +- 最低限 `title`, `date`, `artist`, `start_time`, `open_time`, `ticket_url`, `price` を取得する +- 日付パース関数 `parseJapaneseDate` を実装(既存コードからコピー可) + +### 2. インデックスへの登録 + +`app/scrapers/index.ts` を編集して新しいスクレイパーを追加: + +```ts +import { scraper as } from "./"; + +export const ALL_SCRAPERS: Scraper[] = [ + // 既存エントリ... + , // ← 追加 +]; +``` + +### 3. 動作確認 + +```bash +# 開発サーバーを起動した状態で +curl "http://localhost:5173/api/scrape?venue_id=" +``` + +レスポンス例: +```json +{ "results": [{ "venue_id": "...", "events_saved": 12 }] } +``` + +### 4. Markdown ファイルの確認 + +スクレイプ成功後、`events/.md` が生成される。 +内容を確認して日付・出演者・料金が正しくパースされているか確認する。 + +## 注意事項 + +- `scrape()` 内で `fetch()` を使う(Node.js 標準 fetch で OK) +- HTML構造はサイトによって異なるので、実際のページを確認してセレクタを調整する +- サイトによってはJavaScriptレンダリングが必要な場合がある(その場合は公式RSSやAPIを探すこと) +- ファイル名は必ず `.ts`(サーバー専用コードだが `.server.ts` は不要) -- cgit v1.2.3