summaryrefslogtreecommitdiff
path: root/.claude/commands/add-livehouse.md
diff options
context:
space:
mode:
Diffstat (limited to '.claude/commands/add-livehouse.md')
-rw-r--r--.claude/commands/add-livehouse.md66
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` は不要)