1.

YouTube Data API v3 入門 — 認証・主要エンドポイント・クォータ・サンプルコード

編集
この記事の要点
  • 事前準備: Google Cloud Console でプロジェクト作成 → YouTube Data API v3 有効化 → 認証情報作成(API キー or OAuth クライアント ID)
  • API キー: 公開データ読み取り専用(動画情報・検索など)。OAuth 2.0: 自分のチャンネル操作(アップロード・コメント投稿)に必要
  • 主要エンドポイント: videos.list / search.list / channels.list / playlistItems.list / commentThreads.list
  • クォータ制限: デフォルト 10,000 ユニット/日。search.list = 100、videos.list = 1 と非常に偏る
  • part パラメータ: 取得フィールドを指定(snippet,statistics,contentDetails)。多いほどレスポンスが膨らむ
  • JS から呼ぶ場合は gapi クライアントライブラリ。サーバ側は google-api-php-client / google-api-python-client

事前準備: Google Cloud Console

  1. Google Cloud Console にアクセス
  2. 新規プロジェクト作成 (または既存プロジェクト選択)
  3. 左メニュー API とサービス → ライブラリ
  4. YouTube Data API v3 を検索 → 有効化
  5. 認証情報+ 認証情報を作成:
    • API キー: 公開データ読み取り用。すぐ発行
    • OAuth クライアント ID: ユーザー認可が必要な操作用。同意画面の設定が必要
  6. API キーは HTTP リファラ制限 / IP 制限を設定してリーク対策

主要エンドポイント

エンドポイント用途クォータコスト
videos.list動画情報取得(指定 ID)1
search.listキーワード検索100
channels.listチャンネル情報1
playlists.list再生リスト一覧1
playlistItems.list再生リスト内動画1
commentThreads.listコメント取得1
videos.insert動画アップロード1,600
liveBroadcasts.listライブ配信1

JavaScript (ブラウザ) からの呼び出し


シンプルな HTTP リクエスト

# API キーで動画情報取得
curl "https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&id=dQw4w9WgXcQ&key=YOUR_API_KEY"

# 検索
curl "https://www.googleapis.com/youtube/v3/search?part=snippet&q=Laravel&type=video&maxResults=5&key=YOUR_API_KEY"

# チャンネル情報
curl "https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&forHandle=@GoogleDevelopers&key=YOUR_API_KEY"

PHP からの呼び出し

setDeveloperKey('YOUR_API_KEY');

$youtube = new Google\Service\YouTube($client);

// 検索
$response = $youtube->search->listSearch('snippet', [
    'q'          => 'Laravel チュートリアル',
    'type'       => 'video',
    'maxResults' => 10,
    'order'      => 'viewCount',
    'regionCode' => 'JP',
]);

foreach ($response->items as $item) {
    echo $item->id->videoId . ' — ' . $item->snippet->title . "\n";
}

// 動画詳細
$videos = $youtube->videos->listVideos('snippet,statistics,contentDetails', [
    'id' => 'dQw4w9WgXcQ',
]);

foreach ($videos->items as $v) {
    echo $v->snippet->title . "\n";
    echo "views: " . $v->statistics->viewCount . "\n";
    echo "duration: " . $v->contentDetails->duration . "\n";  // ISO 8601 PT4M13S
}

part パラメータの主な値

part 値含まれる情報
snippetタイトル、説明、サムネ、公開日、チャンネル名
statistics視聴数、いいね数、コメント数
contentDetails動画長さ (ISO 8601)、画質、字幕有無、年齢制限
status公開状態、組込許可、ライセンス
player埋込用 iframe HTML
topicDetailsWikipedia トピック関連

カンマ区切りで複数指定: part=snippet,statistics,contentDetails必要なものだけにしてクォータ節約

クォータ管理

  • デフォルト 10,000 ユニット/日。日本時間 16:00 / 17:00 (PST 0:00) にリセット
  • search.list1 リクエスト = 100 ユニット。100 回叩くと枯渇
  • 不足する場合は クォータ拡張申請(フォーム提出 → 数週間レビュー)
  • 節約テク: fields パラメータで返却フィールドを絞る、結果キャッシュ、ID 既知なら videos.list(コスト 1)に切替
# fields パラメータ例 — 必要だけ取り出す
?part=snippet,statistics
&fields=items(id,snippet/title,statistics/viewCount)

OAuth が必要な操作

自分のチャンネルへの動画アップロードプレイリスト編集コメント投稿は API キーでは不可。OAuth 2.0 認可フローが必要です:

setClientId('CLIENT_ID');
$client->setClientSecret('CLIENT_SECRET');
$client->setRedirectUri('http://localhost/oauth2callback.php');
$client->addScope(Google\Service\YouTube::YOUTUBE_UPLOAD);

if (!isset($_GET['code'])) {
    header('Location: ' . $client->createAuthUrl());
    exit;
}

$token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
$client->setAccessToken($token);

// これで OAuth 必須 API も呼べる
$youtube = new Google\Service\YouTube($client);
// $youtube->videos->insert(...)

FAQ

Q: API キーが漏洩した
A: Cloud Console から即座に削除し、新規発行。リファラ制限 / IP 制限を必ず設定。フロントエンド埋込は最小限の権限のみ。

Q: search.list でフィルタしたら結果がおかしい
A: order=relevance がデフォルト。再現性が必要なら order=date + 日付フィルタ。publishedAfter / publishedBeforeRFC 3339 形式。

Q: クォータが枯渇したらどうなる
A: quotaExceeded エラーで全リクエストが失敗。翌日リセットまで待つか、別プロジェクトの API キーを発行。長期的にはキャッシュ / バックエンド集約が必須。

編集
Post Share
子ページ
  1. APIキー取得方法
  2. APIの有効化
  3. チャンネル情報の取得
  4. 動画やチャンネルの検索
  5. エラー一覧
同階層のページ
  1. YouTube Data API (v3)
  2. Twitter API
  3. Facebook API
  4. Google Trends
  5. Google Custom Search API
  6. App Store Connect API
  7. Revit API