summaryrefslogtreecommitdiff
path: root/.claude/skills
diff options
context:
space:
mode:
Diffstat (limited to '.claude/skills')
-rw-r--r--.claude/skills/import-golive-events.md90
-rw-r--r--.claude/skills/register-band.md118
2 files changed, 208 insertions, 0 deletions
diff --git a/.claude/skills/import-golive-events.md b/.claude/skills/import-golive-events.md
new file mode 100644
index 0000000..ec03452
--- /dev/null
+++ b/.claude/skills/import-golive-events.md
@@ -0,0 +1,90 @@
+---
+description: golive.yyamashita.com からイベント情報を取得し、出演バンドを whoisband に一括登録する
+---
+
+# goliveイベント出演者インポートスキル
+
+golive の API からイベントを取得し、出演バンドをまとめて whoisband に登録する。
+
+## 使い方
+
+```
+/import-golive-events
+```
+
+オプション引数:
+- 日付範囲: `/import-golive-events 2026-05-14 2026-06-14`
+- バンド名絞り込み: `/import-golive-events keyword=渋谷`
+
+## 手順
+
+### Step 1: golive APIからイベント取得
+
+```bash
+curl -s -H "X-Crawler-Access: f9a3c1e847b2d056" \
+ "https://golive.yyamashita.com/api/events?limit=100&date_from=$(date +%Y-%m-%d)" \
+ | python3 -c "
+import json, sys, re
+
+data = json.load(sys.stdin)
+events = data['events']
+
+# artistフィールドから出演者名を抽出(/ または , で区切り)
+bands = set()
+for e in events:
+ artist = e.get('artist') or ''
+ # スラッシュ・読点・コンマで分割
+ parts = re.split(r'[//、,,]', artist)
+ for p in parts:
+ name = p.strip()
+ if name:
+ bands.add(name)
+
+for b in sorted(bands):
+ print(b)
+"
+```
+
+引数で日付が指定されていれば `date_from` / `date_to` に使う。複数ページある場合は `offset` を増やして繰り返す。
+
+### Step 2: 既登録バンドとの差分を計算
+
+```bash
+curl -s "https://whoisband.yyamashita.com/api/bands" \
+ | python3 -c "import json,sys; [print(b['name']) for b in json.load(sys.stdin)]"
+```
+
+Step1 で得たバンド名リストと照合し、**未登録のバンドのみ**を対象リストとする。
+
+### Step 3: 各バンドを順番に登録
+
+対象リストの各バンドについて `/register-band` スキルを実行する:
+
+- 1バンドずつ順番に処理する(並行実行しない)
+- 登録成功・スキップ・エラーを記録していく
+- エラーが出ても次のバンドへ進む(中断しない)
+
+### Step 4: 登録結果サマリを表示
+
+```
+=== goliveイベント出演者 登録完了 ===
+取得イベント数: XX件
+抽出バンド数: XX件
+登録済みスキップ: XX件
+新規登録: XX件
+エラー: XX件
+
+新規登録バンド:
+ - バンド名 → https://whoisband.yyamashita.com/bands/of/{id}
+ - ...
+
+エラー:
+ - バンド名: エラー内容
+```
+
+## 注意事項
+
+- `artist` フィールドが null のイベントはスキップする
+- バンド名が1文字以下、または明らかにバンド名でない文字列(「他」「ゲスト」「TBA」など)はスキップする
+- 同一バンドが複数イベントに出演していても重複登録しない(Step2で除外)
+- ページネーション: golive APIは1回最大100件。イベント数が多い場合は `offset=100`, `offset=200` で繰り返す
diff --git a/.claude/skills/register-band.md b/.claude/skills/register-band.md
new file mode 100644
index 0000000..970e57c
--- /dev/null
+++ b/.claude/skills/register-band.md
@@ -0,0 +1,118 @@
+---
+description: バンド名を受け取り、Web検索で情報を収集して whoisband.yyamashita.com の本番APIに登録する
+---
+
+# バンド登録スキル
+
+本番API(`https://whoisband.yyamashita.com`)に直接 POST してバンドとメンバーを登録する。
+
+## 使い方
+
+```
+/register-band BAND_NAME
+```
+
+例: `/register-band 東京事変`
+
+## 手順
+
+### Step 1: 既存バンドの重複確認
+
+```bash
+curl -s "https://whoisband.yyamashita.com/api/bands" | python3 -c "
+import json,sys
+data=json.load(sys.stdin)
+name='$ARGUMENTS'.strip()
+matches=[b for b in data if b['name']==name or b['slug']==name.lower()]
+print('FOUND:' + json.dumps(matches) if matches else 'NOT_FOUND')
+"
+```
+
+既に登録済みであればその旨をユーザーに伝えてスキップする。
+
+### Step 2: Web検索で情報収集
+
+引数のバンド名を使い、WebSearch / WebFetch で以下を収集する:
+
+1. `{バンド名} バンド 公式` で日本語検索
+2. `{バンド名} band official site` で英語検索
+3. Wikipedia ページが見つかれば WebFetch で詳細取得(メンバー・概要)
+4. 公式サイトが見つかれば WebFetch で SNS リンクを収集
+5. X アカウントは `{バンド名} band x.com OR twitter.com` で検索
+
+収集対象:
+- **活動拠点** (area): 出身地・拠点都市(例: "東京", "大阪")
+- **ステータス** (status): 活動中→`active` / 活動休止→`hiatus` / 解散→`disbanded`
+- **説明** (description): 200字以内の概要文(日本語)
+- **リンク** (links): URL を下記 label で分類
+ - `official` 公式サイト / `x` X(Twitter) / `instagram` / `youtube` / `spotify`
+ - `apple_music` / `wikipedia` / `soundcloud` / `bandcamp` / `tiktok` / `linktree` / `other`
+- **メンバー** (members): 名前と担当パート一覧
+
+### Step 3: 既存アーティストの確認
+
+```bash
+curl -s "https://whoisband.yyamashita.com/api/artists"
+```
+
+メンバー名と照合して既存/新規を振り分ける。
+
+### Step 4: 新規アーティストを登録(メンバーがいる場合)
+
+メンバーごとに順番に実行してUUIDを取得する:
+
+```bash
+curl -s -X POST "https://whoisband.yyamashita.com/api/artists" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "name": "メンバー名",
+ "links": [],
+ "message": "golive自動登録"
+ }'
+```
+
+レスポンスの `id` フィールド(UUID)を控えておく。
+
+### Step 5: バンドを登録
+
+取得したメンバーの UUID を使って band を POST する:
+
+```bash
+curl -s -X POST "https://whoisband.yyamashita.com/api/bands" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "name": "バンド名",
+ "area": "活動拠点",
+ "status": "active",
+ "description": "説明文",
+ "links": [
+ { "label": "official", "url": "https://..." },
+ { "label": "x", "url": "https://x.com/..." }
+ ],
+ "members": [
+ { "artist_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "role": "Vocal" },
+ { "artist_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "role": "Guitar" }
+ ],
+ "message": "golive自動登録"
+ }'
+```
+
+`role` は複数パートを `"Vocal, Guitar"` のようにカンマ区切りで書ける。
+使えるロール: Vocal, Guitar, Bass, Drums, Keyboard, DJ, Strings, Brass, Percussion, Programming, Manipulator, Turntable, Other
+
+### Step 6: 結果確認
+
+レスポンスの `id` からURLを生成してユーザーに提示:
+
+```
+登録完了: バンド名
+→ https://whoisband.yyamashita.com/bands/of/{id}
+```
+
+slug 重複エラー(409)が出た場合は `slug` フィールドを追加して別の値を指定して再実行する。
+
+## 注意事項
+
+- 情報が見つからないフィールドは省略(`area`, `description`, `links` はすべてオプション)
+- メンバー情報が一切取れない場合は `members` を空配列にしてバンドのみ登録する
+- 解散済みバンドは `status: "disbanded"` を設定する