From 4093468dc7117a2d796b9a18829d0058f742c334 Mon Sep 17 00:00:00 2001 From: yyamashita Date: Wed, 10 Jun 2026 01:38:34 +0900 Subject: =?UTF-8?q?Add=20auto-enrichment=20skill:=20golive=20+=20venue=20s?= =?UTF-8?q?ite=20=E2=86=92=20AppSync?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit enrich-event.py searches golive SQLite DB (/app/tokyo-livehouse-events/data/events.db) for the matching venue event, then fetches the venue detail page to download the flyer image, uploads it to S3, and updates the AppSync Event record with ticketURL, detailURL, mainImageURL, description (OPEN/START times + artists), and ticketFee. CLAUDE.md updated with the full add→enrich→deploy workflow for agent use. Co-Authored-By: Claude Sonnet 4.6 --- CLAUDE.md | 153 +++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 122 insertions(+), 31 deletions(-) (limited to 'CLAUDE.md') diff --git a/CLAUDE.md b/CLAUDE.md index 0f8b3aa..13bf017 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,51 +13,118 @@ mosquitone バンドの各システムを管理するリポジトリ。 - 本番ブランチ: `main` - リージョン: `ap-northeast-1` -#### バックエンド (AppSync) +#### バックエンド (AppSync / DynamoDB) - エンドポイント: `https://APP_SYNC_ENDPOINT_REDACTED/graphql` -- API キー: `.env` の `APP_SYNC_API_KEY` 参照(`APP_SYNC_API_KEY_REDACTED`) -- データストア: AWS AppSync + DynamoDB (Amplify DataStore) +- API キー: `APP_SYNC_API_KEY_REDACTED`(`.env` の `APP_SYNC_API_KEY`) -#### 主要 GraphQL 型 +#### 情報ソース -**Event(ライブ情報)** -| フィールド | 型 | 必須 | 説明 | -|---|---|---|---| -| id | ID | ✓ | UUID | -| type | EventType | ✓ | 現状 `LIVE` のみ | -| date | AWSDate | - | YYYY-MM-DD | -| title | String | ✓ | イベントタイトル | -| venueName | String | - | 会場名 | -| published | Boolean | ✓ | 公開フラグ | -| description | String | ✓ | 出演者など | -| ticketFee | String | - | チケット料金 | -| ticketURL | AWSURL | - | チケット購入 URL | -| detailURL | AWSURL | - | 詳細 URL | -| mainImageURL | AWSURL | - | フライヤー画像 URL | -| shortTitle | String | - | 短いタイトル | -| key | String | - | 識別キー(YYYYMMDD 等) | -| venueURL | AWSURL | - | 会場 URL | +| ソース | 説明 | アクセス方法 | +|---|---|---| +| **golive** (`golive.yyamashita.com`) | ライブハウス公演情報スクレイパー (tokyo-livehouse-events) | SQLite: `/app/tokyo-livehouse-events/data/events.db` | +| **ライブハウス公式サイト** | イベント詳細・フライヤー画像 | HTTP fetch | +| **tiget.net** | チケット販売(golive 経由で取得) | golive DB の `ticket_url` | -## よく使うコマンド +golive が持つ会場スクレイパー(主要なもの): + +| AppSync venueName | golive venue_id | スクレイパー状態 | +|---|---|---| +| navey floor AKASAKA | `navey-floor` | ✅ | +| Meets 大塚 | `meets-otsuka` | ✅ | +| 国分寺MORGANA | `morgana-kokubunji` | ✅ | +| BuzzFront Yokohama | `buzzfront-yokohama` | ✅ | +| 下北沢ERA | `shimokitazawa-era` | ✅ | +| 新代田FEVER | `fever-shindaita` | ✅ | +| 吉祥寺WARP | `warp-kichijoji` | ✅ | + +golive に登録されていない会場は `enrich-event.py` が `detailURL` から直接フェッチする。 + +--- + +## ライブ情報追加ワークフロー + +**新しいライブ情報を追加するときは必ず以下の手順で実施すること。** + +### ステップ 1: イベント作成(基本情報) ```bash -# .env を読み込む -source .env # または set -a; source .env; set +a +# events/ ディレクトリに JSON ファイルを作成 +# ファイル名: YYYY-MM-DD-.json +cp official-site/events/2026-06-27-cre4m-sod4.json official-site/events/.json +# 内容を編集 +``` -# ライブ一覧を新しい順に表示 -bash official-site/list-events.sh +必須フィールド: +- `type`: `"LIVE"` (固定) +- `date`: `"YYYY-MM-DD"` +- `title`: イベント名(主催者の名称) +- `venueName`: 会場名(golive の会場マップと対応させること) +- `published`: `true` or `false` +- `description`: 仮でも `""` 以外を設定(後でエンリッチが上書き) + +AppSync に登録: + +```bash +bash official-site/add-event.sh official-site/events/.json +``` + +返ってきた `id` を控えておく。 + +### ステップ 2: 自動エンリッチ(詳細情報を golive + 会場サイトから取得) -# イベントを追加 -bash official-site/add-event.sh +```bash +# サーバー上で実行(golive SQLite DB に直接アクセスできる環境) +python3 official-site/enrich-event.py +``` + +エンリッチが自動で行うこと: +1. **golive DB を検索** → `ticketURL`(tiget 等)、`detailURL`(会場イベントページ)、OPEN/START 時刻、出演者リストを取得 +2. **会場イベントページをフェッチ** → フライヤー画像を抽出 +3. **S3 にフライヤーをアップロード** → `public/site/live/-flyer.jpg` +4. **AppSync の Event レコードを更新** + +golive にまだデータがない場合(スクレイプが古い等)は先にスクレイプを更新する: + +```bash +# golive のスクレイプを更新(navey-floor の例) +curl -H "X-Crawler-Access: f9a3c1e847b2d056" \ + "https://golive.yyamashita.com/api/scrape?venue_id=navey-floor" +# 完了を待ってから再実行 +python3 official-site/enrich-event.py +``` -# Amplify を手動デプロイ(main ブランチの再ビルド) +未エンリッチのイベントをまとめて処理する場合: + +```bash +python3 official-site/enrich-event.py --all-unenriched +``` + +### ステップ 3: サイトをデプロイ + +```bash +bash official-site/deploy.sh +``` + +Amplify が `main` ブランチを再ビルドし、https://www.mosquit.one に反映される。完了まで約 5〜10 分。 + +--- + +## よく使うコマンド + +```bash +# ライブ一覧(公開フラグ付き) +bash official-site/list-events.sh + +# イベント追加 → エンリッチ → デプロイ(一連の流れ) +bash official-site/add-event.sh official-site/events/.json +python3 official-site/enrich-event.py bash official-site/deploy.sh ``` ## AWS 認証 -`.env` に以下を設定: +`.env` に設定(git 管理外): ``` AWS_ACCESS_KEY_ID=... @@ -65,4 +132,28 @@ AWS_SECRET_ACCESS_KEY=... AWS_DEFAULT_REGION=ap-northeast-1 ``` -`aws` コマンドは `/tmp/awscli/aws/dist/aws` を使用(システムに AWS CLI がない場合)。 +`aws` コマンドが未インストールの場合は `/tmp/awscli/aws/dist/aws` を使用: + +```bash +AWS_CLI=/tmp/awscli/aws/dist/aws python3 official-site/enrich-event.py +``` + +## AppSync Event スキーマ + +| フィールド | 型 | 必須 | 説明 | +|---|---|---|---| +| id | ID | ✓ | UUID(自動生成) | +| type | EventType | ✓ | `LIVE` のみ | +| date | AWSDate | - | YYYY-MM-DD | +| title | String | ✓ | イベントタイトル | +| venueName | String | - | 会場名 | +| published | Boolean | ✓ | 公開フラグ | +| description | String | ✓ | OPEN/START + 出演者 | +| ticketFee | String | - | 料金テキスト | +| ticketURL | AWSURL | - | チケット購入 URL | +| detailURL | AWSURL | - | 会場イベントページ URL | +| mainImageURL | AWSURL | - | フライヤー S3 URL | +| shortTitle | String | - | 短いタイトル | +| key | String | - | 日付キー(YYMMDD 等) | +| venueURL | AWSURL | - | 会場 URL | +| _version | Int | ✓ | Amplify DataStore 競合解決用(更新時に必須) | -- cgit v1.2.3