pgx
PGX — Lightweight Postgres for AI agents. Written in Rust. Thousands of isolated databases in one runtime. 🐘
Translation pending
アーティスト分析テストサイト
Translation pending
DataTypeScript · PythonGitHub @Kosuke-ItoOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Spotify・YouTube・Last.fm からアーティスト指標を日次で自動収集し、Vite + React ダッシュボードで可視化するリポジトリです。GitHub Actions で収集とニュースアノテーションが自動実行されます。 Spotify(月間リスナー数 / フォロワー数 / Top Cities) なぜこの方法? Spotify 公式 Web API には月間リスナー数のエンドポイントが存在しません。Spotify の Web プレーヤーが内部的に使う Partner API のレスポンスを Playwright(ヘッドレスブラウザ)でインターセプトして取得しています。 注意点: • Spotify がページ構造や API を変更すると壊れる可能性があります • Top Cities は API が返す上位 5 都市のみ(ページネーション不可) • ヘッドレスブラウザ検知対策として User-Agent と webdriver フラグを偽装しています なぜこの方法? YouTube Data API は公式に提供されており、API Key のみで利用可能(OAuth 不要)。無料枠で 1 日 10,000 クォータ(1 リクエスト = 1 クォータ)。 必要な環境変数: YOUTUBE_API_KEY(GitHub Secrets に登録)Read the full README ↗
Spotify・YouTube・Last.fm からアーティスト指標を日次で自動収集し、Vite + React ダッシュボードで可視化するリポジトリです。GitHub Actions で収集とニュースアノテーションが自動実行されます。
デモ: https://artist-analytics.pages.dev
| 指標 | 取得方法 | 更新頻度 |
|---|---|---|
| Monthly Listeners | Playwright で api-partner.spotify.com のレスポンスをインターセプト | 日次 |
| Followers | 同上(stats.followers) | 日次 |
| Top Cities(上位5都市) | 同上(stats.topCities) | 日次 |
なぜこの方法? Spotify 公式 Web API には月間リスナー数のエンドポイントが存在しません。Spotify の Web プレーヤーが内部的に使う Partner API のレスポンスを Playwright(ヘッドレスブラウザ)でインターセプトして取得しています。
注意点:
| 指標 | 取得方法 | 更新頻度 |
|---|---|---|
| Subscribers | YouTube Data API v3 channels.list | 日次 |
| Total Views | 同上(statistics.viewCount) | 日次 |
なぜこの方法? YouTube Data API は公式に提供されており、API Key のみで利用可能(OAuth 不要)。無料枠で 1 日 10,000 クォータ(1 リクエスト = 1 クォータ)。
注意点:
必要な環境変数: YOUTUBE_API_KEY(GitHub Secrets に登録)
| 指標 | 取得方法 | 更新頻度 |
|---|---|---|
| Listeners | Last.fm API artist.getInfo | 日次 |
| Scrobbles(累計再生回数) | 同上(stats.playcount) | 日次 |
なぜこの方法? Last.fm はユーザーが Spotify / Apple Music 等を聴いた記録(スクロブル)を蓄積するサービスです。Spotify では取得できない「累計再生回数」が分かります。
データの特性と偏り:
必要な環境変数: LASTFM_API_KEY(GitHub Secrets に登録)
| 内容 | 取得方法 | 更新頻度 |
|---|---|---|
| アーティスト関連ニュース | Claude Code Action(GitHub Actions)が Web 検索 | 日次 |
なぜ? リスナー数の変動に対して「なぜ増えた / 減ったか」を紐づけるため。新曲リリース、MV 公開、ライブ開催などのイベントをチャート上にマーカーとして表示します。
必要な環境変数: CLAUDE_CODE_OAUTH_TOKEN(Max プランの OAuth トークン)
| 指標 | 計算方法 | 意味 |
|---|---|---|
| Fan Retention | Spotify Followers ÷ Monthly Listeners × 100 | 高いほどコアファンが多い。低いほどプレイリスト経由のカジュアルリスナー中心 |
| YouTube Efficiency | Total Views ÷ Subscribers | 登録者あたりの再生効率。高いほどコンテンツがアクティブに視聴されている |
| Growth Ranking | (今日 - 前日) の絶対値 / (今日 - 7日前) ÷ 7日前 × 100 | 日次・週次の成長率でアーティストをランキング |
music-analytics/
├── .github/workflows/
│ ├── collect.yml # 日次データ収集(JST 23:00 / UTC 14:00)
│ ├── annotate.yml # 日次ニュース収集(JST 23:30 / UTC 14:30)
│ └── investigate-buzz.yml # バズ原因の自動調査(JST 24:00 / UTC 15:00)
├── collector/
│ ├── scraper.py # Spotify スクレイピング(Playwright)
│ ├── youtube.py # YouTube Data API v3
│ ├── lastfm.py # Last.fm API
│ ├── storage.py # JSON 読み書き・バリデーション
│ ├── main.py # CLI エントリポイント
│ └── tests/ # pytest テスト
├── scripts/
│ ├── config.json # アーティスト定義(ID, region, live_attendance)
│ └── fetch-data.sh # Cloudflare Pages ビルド時に data リポジトリを取得
├── data/ # 蓄積データ(Private リポジトリ music-analytics-data を clone。Git 管理外)
│ └── {artist_id}.json
├── frontend/
│ ├── src/
│ │ ├── components/ # React コンポーネント
│ │ ├── hooks/ # データ取得フック
│ │ ├── utils/ # 分析指標の計算ユーティリティ
│ │ └── types/ # TypeScript 型定義
│ ├── functions/
│ │ └── api/ # Cloudflare Pages Functions(アーティスト追加API等、Basic 認証付き)
│ └── vite.config.ts
├── mcp/ # MCP サーバー(外部 AI ツールからデータ照会)
├── doc/ # 競合調査などのドキュメント
└── .mise.toml # Python 3.12 + Node 22
収集データは Private リポジトリで管理しているため、まずルート直下に clone します(アクセス権が必要)。
git clone [email protected]:Kosuke-Ito/music-analytics-data.git data
# フロントエンド(vite dev / build はルートの data/ と scripts/config.json を読む)
cd frontend && pnpm install && pnpm dev
# データ収集(全アーティスト)
YOUTUBE_API_KEY=xxx LASTFM_API_KEY=xxx python -m collector.main
# Python(collector)
mise exec -- python -m pytest collector/tests -v
# Frontend(Vitest)
cd frontend && pnpm test
# Docker Compose
docker compose run --rm frontend-test
docker compose run --rm collector-test
mcp/ に MCP(Model Context Protocol)サーバーを同梱しています。Claude Code などの MCP クライアントから、蓄積したアーティストデータを直接照会できます。
提供ツール(5種):
| ツール | 内容 |
|---|---|
get_artist_data | アーティストの全データ(日次レコード・アノテーション・バズ・楽曲統計) |
list_artists | 追跡中アーティスト一覧(region フィルタ可) |
get_buzz_events | バズイベント(annotated / organic / seasonal) |
get_annotations | ニュースアノテーション(release / viral / tour 等) |
search_artists | アーティスト名の部分一致検索 |
セットアップ:
cd mcp && npm ci && npm run build
Claude Code への登録例:
claude mcp add music-analytics \
-e MUSIC_ANALYTICS_API_USER=<user> \
-e MUSIC_ANALYTICS_API_PASS=<pass> \
-- node /path/to/music-analytics/mcp/dist/index.js
登録後は「YOASOBI の直近のバズと原因を教えて」のような自然言語での問い合わせが、MCP ツール経由でデータに基づいて回答されます。API は Basic 認証付きの /api/* を利用するため、環境変数に認証情報が必要です。向き先を本番以外(ローカルの Pages dev サーバー等)に変えたい場合は -e MUSIC_ANALYTICS_API=<URL> を追加してください(未設定時は本番 URL)。
競合比較の詳細は doc/competitors.md を参照してください。
validation_flags に large_monthly_listener_delta を付与/api/*(アーティスト追加などの管理系エンドポイント)は Basic 認証で保護しています。認証情報は Cloudflare Pages の環境変数(Secrets)で管理し、未設定時は fail-closed(503)で拒否します