1.

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

▶

YouTube Data APIは動画/チャンネル等のデータ取得や認可された操作のAPIです。項目を選択してください。 以下の実在する子ページから用途を選べます。

YouTube APIの応答、認証と実行元、割当を分ける確認順序

2026年10月26日公式資料確認。子ページの全内容まで一括検証済みという意味ではありません。APIキーはプロジェクトの識別/公開データ要求、OAuthはユーザーとしてのアクセス認可を扱います。APIキーをOAuthの代替にせず、クライアントIDだけでユーザー認可が成立するとも考えません。

この記事の要点
  • 事前準備: 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
  • 割当: 検索/アップロードの独立枠と、その他の合計枠を分ける。最新公式表と実プロジェクトの値を確認
  • 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制限を組み合わせる。制限だけで漏洩しない保証とはならない

主要エンドポイント

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

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

旧例の注意:旧ブラウザ例はSDKの読み込み/失敗処理が省略されています。await gapi.load(...)だけで準備完了を待てるとは扱わず、callback内の初期化・失敗処理を設計します。公開クライアントのキーは利用者から見えるため秘密値を置かず、実行元/API制限を照合します。実ブラウザ/SDKの検証済みコードではありません。

<script src="https://apis.google.com/js/api.js"></script>
<script>
const API_KEY = 'YOUR_API_KEY';

async function init() {
  await gapi.load('client', async () => {
    await gapi.client.init({
      apiKey: API_KEY,
      discoveryDocs: ['https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest'],
    });
    searchVideos('Laravel');
  });
}

async function searchVideos(query) {
  const res = await gapi.client.youtube.search.list({
    part: 'snippet',
    q: query,
    type: 'video',
    maxResults: 10,
    order: 'relevance',  // date / rating / viewCount / relevance
  });

  res.result.items.forEach(item => {
    console.log(item.id.videoId, item.snippet.title);
  });
}

init();
</script>

シンプルな HTTP リクエスト

旧例の注意:旧curlはAPIキーをURLへ入れる参考記録です。実キーへ置換してシェル履歴・プロセス引数・ログへ残さず、公式クライアント等で安全に管理します。HTTPSであってもURLへの記録は防げません。各API呼出しは割当を消費し得ます。

# 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 からの呼び出し

旧例の注意:旧PHP例は無指定版の依存追加・資格情報の直書き・例外処理の省略があります。本番へcomposer requireを実行する指示ではなく、実キーや応答全文の出力も行いません。SDK版/認証情報管理・HTTP/業務結果・失敗時の扱いを別に設計します。

<?php
// composer require google/apiclient

require __DIR__ . '/vendor/autoload.php';

$client = new Google\Client();
$client->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。必要なものだけにして転送量を抑える。part/fieldsを絞っても割当単価が下がるとは限らない。

クォータ管理

  • 2026-10-26公式表確認:検索/アップロード以外は既定合計10,000 units/日。日次の基準はPacific Time午前0時。実プロジェクトの枠と利用量を確認
  • search.listとvideos.insertは各1呼出し=独立枠の1、各既定100呼出し/日。旧100/1,600 unitsから一律に計算しない
  • 不足する場合は クォータ拡張申請。公式の監査/申請条件に従い、承認日数は保証しない
  • 不要な呼出し/ページ取得を抑える。fieldsは主に転送量向け。保存/キャッシュはポリシーの保持/更新/削除条件を確認する。既知IDに適したvideos.list等を選ぶが用途/結果は検索と同一ではない

旧例の注意:fieldsは返却項目を絞る例です。転送量削減と、呼出しの割当単価の削減を混同しません。

# fields パラメータ例 — 必要だけ取り出す
?part=snippet,statistics
&fields=items(id,snippet/title,statistics/viewCount)

OAuth が必要な操作

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

旧例の注意:この旧OAuth断片をそのまま公開しないでください。要求とcallbackを結ぶ予測困難なstateの保存/照合/消費、拒否/失敗処理、tokenの安全な保管/期限/再認可等が欠けます。codeがあるだけで交換せず、client secretをブラウザへ出しません。YOUTUBE_UPLOADのscopeだけでコメント/全操作が認可されるわけでもありません。完全な認証実装/検証済みフローではありません。

<?php
$client = new Google\Client();
$client->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: 利用箇所と影響を確認し、管理者の手順で失効/切替と利用量の調査を行います。秘密値の再公開を避け、実行元に応じた制限も見直します。この教材の確認のために既存キーを削除/発行しません。

Q: search.list でフィルタしたら結果がおかしい
A: order=relevance がデフォルト。並びや期間を指定するならorder=dateや日付フィルタを検討しますが、同じ結果の再現を保証しません。publishedAfter / publishedBefore は RFC 3339 形式。

Q: クォータが枯渇したらどうなる
A: 対象の操作/プロジェクトの割当枠を確認し、不要な呼出しを止め、正式な再開/増枠手順を検討します。全操作が一律に失敗するとは断定せず、別プロジェクトやキーへ切り替えて割当を回避しません。詳細はエラー一覧を参照してください。

Youtubeとは?

YouTubeは動画の視聴・投稿のプラットフォームです。Webサイトはこちら。Web上で閲覧できることと、APIの利用認可/対象の可視性は別に確認します。

YouTube Data API (v3)とは?

動画やチャンネルの情報をアプリケーションで取得し、認可された操作を行うAPIです。元記事の公式入門リンクも保持します:こちら。

認証・割当の確認先

HTTP状態・reason・APIキー/OAuth・実行元・割当枠の切り分けと合成応答のPHP教材はエラー一覧を参照してください。無効な要求や追加ページも割当を消費し得ます。必要なscopeと対象ユーザー/チャンネル、結果の空配列・ページ情報を確認します。

元記事にあった別プロジェクト/キーによる割当回避の案内は訂正しました。保存/キャッシュも公式ポリシーを守り、無期限保存や制限解除を解決策にしません。ここでは実キー/API通信/OAuthログイン/SDK/Cloud設定の変更・課金/書込を検証していません。本体の認証設定やキャッシュも変更していません。

公式資料:YouTube APIのエラー、最新の割当表、search.list、videos.insert、OAuthの用途、APIキーの制限、キーの安全な管理、OAuth Web Serverフロー、監査と増枠申請、開発者ポリシー。

子ページ
  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

最近更新/作成されたページ