blob: 5aff417f6637e1b8c58b1b065d8d17676e81ec25 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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` は不要)
|