pgx
PGX — Lightweight Postgres for AI agents. Written in Rust. Thousands of isolated databases in one runtime. 🐘
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
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 に登録)查看完整 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)で拒否します