INTERNAL / SETUP GUIDE

YouTube Analytics API
セットアップ手順

insight-analysis-pro でチャンネル別 refresh token 方式の Analytics API を使うための初回セットアップ手順書。

00全体像

YouTube Analytics API はサービスアカウント非対応で、チャンネルオーナーの OAuth 同意が必須。なので「チャンネルごとに refresh token を1個作って、Bitwarden で共有」する設計にしている。

STEP誰が頻度やること
Amocha 全体で誰か1人初回1回Google Cloud で OAuth クライアントを作って Bitwarden に保管
Bチャンネルオーナーチャンネル追加時yt_auth.py を実行して refresh token を生成 → Bitwarden に保管
C誰でも都度Bitwarden から token を取得して yt_analytics.py を実行
共有方法は Bitwarden 一択。 credentials/client_secret.jsontokens/<channel_id>.json.gitignore 済みで git には乗らない。共有 Vault にファイル添付して受け渡しすること。

AOAuth クライアントを作る(mocha全体で1回)

  1. Google Cloud Consolemocha-official プロジェクトを開く
  2. 「APIとサービス」→ YouTube Analytics APIYouTube Data API v3 を両方有効化
  3. 「認証情報」→「認証情報を作成」→「OAuth クライアント ID」
  4. アプリケーションの種類: デスクトップアプリ を選択
  5. JSON をダウンロードして credentials/client_secret.json として保存
  6. Bitwarden の mocha 共有 Vault にアップロード(タイトル例: insight-analysis-pro / client_secret.json
OAuth 同意画面が「テスト」モードの場合、許可済みテストユーザーに各チャンネルオーナーの Google アカウントを追加しておくこと。本番モードに切り替えるなら Google の審査が必要。

Bチャンネルを認証する(チャンネルオーナーが1回)

新しいチャンネルを追加するたびに、そのチャンネルのオーナー(or 管理者)権限を持つ Google アカウントで認証する。

1. リポジトリと依存をセットアップ

git clone git@github.com:mochainc/insight-analysis-pro.git
cd insight-analysis-pro
pip install -r requirements.txt

2. Bitwarden から OAuth クライアント JSON を配置

mkdir -p credentials
# Bitwarden の "insight-analysis-pro / client_secret.json" を
# credentials/client_secret.json として保存

3. 認証を実行

ブラウザが自動で開くので、そのチャンネルのオーナー Google アカウントでログイン → アクセス許可。

python3 scripts/yt_auth.py \
  --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \
  --label todoro-chan

成功すると tokens/UCxxxxxxxxxxxxxxxxxxxxxx.json が生成される。中身は refresh token を含むので扱い注意。

4. token を Bitwarden にアップロード

他メンバーが使えるよう、生成された JSON を Bitwarden の mocha 共有 Vault にアップロード。タイトル例: insight-analysis-pro / token / todoro-chan

絶対に git commit しない。 tokens/credentials/.gitignore 済みだが、強制コミットしないように git status でも目視確認。

Cデータを取得する(誰でも何度でも)

1. Bitwarden から token を配置

mkdir -p tokens
# Bitwarden の "insight-analysis-pro / token / xxx" を
# tokens/UCxxxxxxxxxxxxxxxxxxxxxx.json として保存

2. 維持率カーブを取る(一番使う)

python3 scripts/yt_analytics.py retention \
  --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \
  --video-id abcDEFghi12 \
  --out output/retention.json

100ポイント(0%, 1%, ..., 100%)の audienceWatchRatiorelativeRetentionPerformance が JSON で返ってくる。

3. 流入元

python3 scripts/yt_analytics.py traffic \
  --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \
  --video-id abcDEFghi12

4. 登録者増減(チャンネル全体 / 日次)

python3 scripts/yt_analytics.py subscribers \
  --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \
  --start 2026-04-01 --end 2026-04-30

5. 任意クエリ(生 API)

python3 scripts/yt_analytics.py raw \
  --channel-id UCxxxxxxxxxxxxxxxxxxxxxx \
  --metrics views,likes,comments \
  --dimensions day \
  --filters "video==abcDEFghi12"

CLI リファレンス

サブコマンド用途必須オプション
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日前にフォールバック。

セキュリティと運用ルール

トラブルシューティング

症状原因対処
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 も再発行される)