diff options
| author | yyamashita <yyamashita@mosquit.one> | 2026-05-06 22:07:53 +0900 |
|---|---|---|
| committer | yyamashita <yyamashita@mosquit.one> | 2026-05-06 22:07:53 +0900 |
| commit | be55729482296663da8c96723bfd22080e6762c1 (patch) | |
| tree | fcd94b1dc5c55f3a80796c90a555863d13fc9a95 /.claude/commands/add-livehouse.md | |
| parent | 014b29bc22b1c207a03dd560051ecdd5df63f0b1 (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to '.claude/commands/add-livehouse.md')
| -rw-r--r-- | .claude/commands/add-livehouse.md | 66 |
1 files changed, 66 insertions, 0 deletions
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 <会場名> <URL> +``` + +例: +``` +/add-livehouse "渋谷 WWW X" "https://www-shibuya.jp/schedule/" +``` + +## 実行手順 + +以下の手順を順番に実行する。 + +### 1. スクレイパーファイルの作成 + +`$ARGUMENTS` から会場名とURLを取得して、`app/scrapers/<venue-id>.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 <camelCaseName> } from "./<venue-id>"; + +export const ALL_SCRAPERS: Scraper[] = [ + // 既存エントリ... + <camelCaseName>, // ← 追加 +]; +``` + +### 3. 動作確認 + +```bash +# 開発サーバーを起動した状態で +curl "http://localhost:5173/api/scrape?venue_id=<venue-id>" +``` + +レスポンス例: +```json +{ "results": [{ "venue_id": "...", "events_saved": 12 }] } +``` + +### 4. Markdown ファイルの確認 + +スクレイプ成功後、`events/<venue-id>.md` が生成される。 +内容を確認して日付・出演者・料金が正しくパースされているか確認する。 + +## 注意事項 + +- `scrape()` 内で `fetch()` を使う(Node.js 標準 fetch で OK) +- HTML構造はサイトによって異なるので、実際のページを確認してセレクタを調整する +- サイトによってはJavaScriptレンダリングが必要な場合がある(その場合は公式RSSやAPIを探すこと) +- ファイル名は必ず `.ts`(サーバー専用コードだが `.server.ts` は不要) |
