insight-analysis-pro でチャンネル別 refresh token 方式の Analytics API を使うための初回セットアップ手順書。
YouTube Analytics API はサービスアカウント非対応で、チャンネルオーナーの OAuth 同意が必須。なので「チャンネルごとに refresh token を1個作って、Bitwarden で共有」する設計にしている。
| STEP | 誰が | 頻度 | やること |
|---|---|---|---|
| A | mocha 全体で誰か1人 | 初回1回 | Google Cloud で OAuth クライアントを作って Bitwarden に保管 |
| B | チャンネルオーナー | チャンネル追加時 | yt_auth.py を実行して refresh token を生成 → Bitwarden に保管 |
| C | 誰でも | 都度 | Bitwarden から token を取得して yt_analytics.py を実行 |
credentials/client_secret.json も tokens/<channel_id>.json も .gitignore 済みで git には乗らない。共有 Vault にファイル添付して受け渡しすること。
mocha-official プロジェクトを開くcredentials/client_secret.json として保存insight-analysis-pro / client_secret.json)新しいチャンネルを追加するたびに、そのチャンネルのオーナー(or 管理者)権限を持つ Google アカウントで認証する。
git clone git@github.com:mochainc/insight-analysis-pro.git cd insight-analysis-pro pip install -r requirements.txt
mkdir -p credentials # Bitwarden の "insight-analysis-pro / client_secret.json" を # credentials/client_secret.json として保存
ブラウザが自動で開くので、そのチャンネルのオーナー Google アカウントでログイン → アクセス許可。
python3 scripts/yt_auth.py \ --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \ --label todoro-chan
成功すると tokens/UCxxxxxxxxxxxxxxxxxxxxxx.json が生成される。中身は refresh token を含むので扱い注意。
他メンバーが使えるよう、生成された JSON を Bitwarden の mocha 共有 Vault にアップロード。タイトル例: insight-analysis-pro / token / todoro-chan。
tokens/ と credentials/ は .gitignore 済みだが、強制コミットしないように git status でも目視確認。
mkdir -p tokens # Bitwarden の "insight-analysis-pro / token / xxx" を # tokens/UCxxxxxxxxxxxxxxxxxxxxxx.json として保存
python3 scripts/yt_analytics.py retention \ --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \ --video-id abcDEFghi12 \ --out output/retention.json
100ポイント(0%, 1%, ..., 100%)の audienceWatchRatio と relativeRetentionPerformance が JSON で返ってくる。
python3 scripts/yt_analytics.py traffic \ --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \ --video-id abcDEFghi12
python3 scripts/yt_analytics.py subscribers \ --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \ --start 2026-04-01 --end 2026-04-30
python3 scripts/yt_analytics.py raw \ --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \ --metrics views,likes,comments \ --dimensions day \ --filters "video==abcDEFghi12"
| サブコマンド | 用途 | 必須オプション |
|---|---|---|
retention | 視聴者維持率カーブ | --channel-id --video-id |
traffic | 流入元別の視聴数 | --channel-id --video-id |
subscribers | 登録者増減(日次) | --channel-id |
raw | 任意 metrics/dimensions/filters | --channel-id --metrics |
共通オプション: --start YYYY-MM-DD / --end YYYY-MM-DD / --out PATH。 --start 省略時は動画公開日(video-id があれば)か30日前にフォールバック。
tokens/ credentials/ は必ず .gitignore。 git status で見えていないこと確認yt_auth.py が自動設定)| 症状 | 原因 | 対処 |
|---|---|---|
OAuthクライアントが見つかりません |
client_secret.json 未配置 | Bitwarden から取得して credentials/client_secret.json に置く |
| 「認証アカウントの所有チャンネルと一致しません」 | 別アカウントでログインした | ブラウザの Google ログアウト → 正しいオーナーアカウントで再実行 |
HttpError 403 |
権限不足 / token 失効 / API未有効化 | Cloud Console で API 有効化を確認 → yt_auth.py --force で再認証 |
| 維持率カーブが空配列 | 視聴回数が閾値未満 / ロング動画ではない | YT は再生数が一定以下のショートではカーブを返さない仕様。動画 ID とロング/ショート種別を確認 |
tokenが既に存在 |
既に認証済みのチャンネル | 上書きする場合は --force を付ける(refresh token も再発行される) |