YouTube データ活用

YouTube Data API v3入門|APIキー発行からPythonで動画情報を取得するまで

2023年8月26日

この記事では、YouTube Data API v3 を使うための準備として、Google CloudでAPIキーを発行し、Pythonから動画情報を取得する最小サンプルを実行するまでの流れを解説します。

最終的には、動画IDを指定して、タイトル・公開日・チャンネル名・再生回数・コメント数・動画時間などを取得できる状態を目指します。YouTubeチャンネル分析、動画一覧取得、字幕・チャット分析の前提になる入口記事です。

この記事でできること

  • Google CloudでYouTube Data API v3を有効化する
  • APIキーを発行する
  • APIキーに制限をかける考え方を理解する
  • PythonからYouTube Data APIを呼び出す
  • 動画IDを指定して、動画の基本情報を取得する
  • APIクォータや取得できる情報の範囲を理解する

想定読者

  • YouTube Data APIを初めて使う方
  • PythonでYouTube動画やチャンネルの情報を取得したい方
  • APIキーの発行から最初のコード実行までを一通り確認したい方
  • YouTubeデータ分析の前処理として、公開データを取得したい方

利用上の注意

YouTube Data APIは、YouTubeの公開情報や自分が権限を持つ情報を取得・操作するための公式APIです。利用時は、Google Cloudの設定、YouTube API Servicesの規約、クォータ制限に注意してください。

  • APIキーは公開リポジトリや記事本文にそのまま貼らないでください。
  • APIキーには、利用できるAPIをYouTube Data API v3に限定するなどの制限を設定するのがおすすめです。
  • APIリクエストにはクォータがあり、無効なリクエストでもクォータを消費します。
  • YouTube Data APIで、メールアドレス、個別視聴履歴、非公開の個人情報を取得することはできません。
  • 取得したデータを公開する場合は、各サービスの規約、著作権、プライバシーに配慮してください。

YouTube Data APIで取得できる主な情報

YouTube Data API v3では、動画、チャンネル、プレイリスト、コメントなどに関する情報を取得できます。

対象取得できる情報の例代表的なAPI
動画タイトル、概要欄、公開日、再生回数、コメント数、動画時間videos.list
チャンネルチャンネル名、説明文、登録者数、総再生回数、動画数channels.list
プレイリストチャンネルのアップロード動画一覧、プレイリスト内動画playlistItems.list
コメント動画コメント、返信コメントcommentThreads.list

この記事では、最初の動作確認として videos.list を使い、1本の動画情報を取得します。

事前準備

この記事では、以下を用意します。

  • Googleアカウント
  • Google Cloud Consoleにアクセスできる環境
  • Python 3.10以降
  • PowerShellまたはコマンドプロンプト

Google Cloudでプロジェクトを作成する

まず、Google Cloud ConsoleでYouTube Data API用のプロジェクトを作成します。

  1. Google Cloud Consoleにログインする
  2. 画面上部のプロジェクト選択から、新しいプロジェクトを作成する
  3. プロジェクト名を入力して作成する
  4. 作成したプロジェクトが選択されていることを確認する

すでに利用するプロジェクトがある場合は、新規作成せずに既存プロジェクトを使っても問題ありません。

YouTube Data API v3を有効化する

次に、作成したプロジェクトでYouTube Data API v3を有効化します。

  1. 左側メニューから API とサービス を開く
  2. ライブラリ を開く
  3. 検索欄に YouTube Data API v3 と入力する
  4. YouTube Data API v3を選択する
  5. 有効にする をクリックする

APIを有効化していない状態でコードを実行すると、権限やAPI未有効化に関するエラーが発生します。

APIキーを発行する

YouTube Data APIをPythonから呼び出すために、APIキーを発行します。

  1. API とサービス を開く
  2. 認証情報 を開く
  3. +認証情報を作成 をクリックする
  4. API キー を選択する
  5. 表示されたAPIキーを控える

APIキーは、コードに直接書くよりも、環境変数や設定ファイルから読み込む形にすると安全です。

APIキーを外部の設定ファイルで安全に管理する方法

APIキーに制限をかける

APIキーを発行したら、必要に応じて制限を設定します。APIキー制限を設定することで、想定外の用途でキーが使われるリスクを下げられます。

  • APIの制限:YouTube Data API v3のみに制限する
  • アプリケーションの制限:用途に応じてIPアドレス、HTTPリファラなどを制限する

ローカルPCからPythonで試す場合は、最初は制限を緩めて動作確認し、動作確認後に段階的に制限を追加する方法もあります。制限を強くしすぎると、Pythonからのリクエストが拒否される場合があります。

Pythonライブラリをインストールする

PythonからYouTube Data APIを呼び出すために、Google API Clientをインストールします。

pip install -U google-api-python-client python-dotenv

python-dotenv は、APIキーを .env ファイルから読み込むために使います。

.envにAPIキーを保存する

プロジェクトフォルダに .env ファイルを作成し、以下のようにAPIキーを保存します。

YOUTUBE_API_KEY=YOUR_API_KEY

YOUR_API_KEY の部分を、発行したAPIキーに置き換えてください。

.env ファイルは、GitHubなどの公開リポジトリにアップロードしないように注意してください。

最小コード:動画情報を取得する

まずは、動画IDを指定して、タイトルや再生回数などの基本情報を取得します。

import os

from dotenv import load_dotenv
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

load_dotenv()

api_key = os.getenv("YOUTUBE_API_KEY")
video_id = "dQw4w9WgXcQ"

if not api_key:
    raise ValueError("YOUTUBE_API_KEY が設定されていません。")

try:
    youtube = build("youtube", "v3", developerKey=api_key)

    response = youtube.videos().list(
        part="snippet,statistics,contentDetails",
        id=video_id,
    ).execute()

    items = response.get("items", [])

    if not items:
        print("Video not found or unavailable.")
    else:
        item = items[0]
        snippet = item.get("snippet", {})
        statistics = item.get("statistics", {})
        content_details = item.get("contentDetails", {})

        print("-- BASIC INFO --")
        print("title:", snippet.get("title"))
        print("publishedAt:", snippet.get("publishedAt"))
        print("channelTitle:", snippet.get("channelTitle"))

        print("-- STATISTICS --")
        print("viewCount:", statistics.get("viewCount"))
        print("likeCount:", statistics.get("likeCount"))
        print("commentCount:", statistics.get("commentCount"))

        print("-- CONTENT DETAILS --")
        print("duration:", content_details.get("duration"))

except HttpError as e:
    print("HTTP Error:", e)
except Exception as e:
    print("Error:", e)

ここでは videos.list を使っています。partsnippetstatisticscontentDetails を指定することで、動画の基本情報・統計情報・動画時間などを取得できます。

実行結果の例

正常に実行できると、以下のような情報が表示されます。

-- BASIC INFO --
title: サンプル動画のタイトル
publishedAt: 2025-08-10T12:00:03Z
channelTitle: Sample Channel

-- STATISTICS --
viewCount: 123456
likeCount: 7890
commentCount: 321

-- CONTENT DETAILS --
duration: PT4M12S

duration はISO 8601形式で返ってきます。たとえば PT4M12S は、4分12秒を意味します。

取得した情報をCSV保存する例

実際の分析では、取得した情報をDataFrameにしてCSV保存しておくと便利です。

from pathlib import Path
import os

import pandas as pd
from dotenv import load_dotenv
from googleapiclient.discovery import build

load_dotenv()

api_key = os.getenv("YOUTUBE_API_KEY")
video_id = "dQw4w9WgXcQ"

youtube = build("youtube", "v3", developerKey=api_key)

response = youtube.videos().list(
    part="snippet,statistics,contentDetails",
    id=video_id,
).execute()

items = response.get("items", [])

if not items:
    raise ValueError("動画が見つかりませんでした。")

item = items[0]
snippet = item.get("snippet", {})
statistics = item.get("statistics", {})
content_details = item.get("contentDetails", {})

row = {
    "video_id": video_id,
    "title": snippet.get("title"),
    "published_at": snippet.get("publishedAt"),
    "channel_title": snippet.get("channelTitle"),
    "channel_id": snippet.get("channelId"),
    "view_count": statistics.get("viewCount"),
    "like_count": statistics.get("likeCount"),
    "comment_count": statistics.get("commentCount"),
    "duration": content_details.get("duration"),
}

df = pd.DataFrame([row])

output_dir = Path("youtube_data")
output_dir.mkdir(parents=True, exist_ok=True)

csv_path = output_dir / f"{video_id}_video_info.csv"
df.to_csv(csv_path, index=False, encoding="utf-8-sig")

print(f"saved: {csv_path}")
print(df.head())

このCSVを保存しておくと、複数動画の分析や、チャンネル単位の集計に発展させやすくなります。

クォータの考え方

YouTube Data APIにはクォータ制限があります。APIを呼び出すたびに、メソッドごとに決められたクォータを消費します。

  • videos.list は1回あたり1ユニット
  • channels.list も1回あたり1ユニット
  • search.list は1回あたり100ユニット
  • 無効なリクエストでも、少なくとも1ユニットを消費する
  • デフォルトの割り当ては1日10,000ユニット

大量の動画を調べる場合は、search.list を多用するより、チャンネルのアップロードプレイリストを使うなど、クォータ消費を抑える設計が重要です。

YouTube Data APIで取得できない情報

YouTube Data APIは便利ですが、すべての情報を取得できるわけではありません。

  • 個別ユーザーの視聴履歴
  • 視聴者のメールアドレス
  • 非公開動画や限定公開動画の情報
  • アーカイブ配信のチャットリプレイ
  • 動画や音声ファイルそのもの

字幕を取得したい場合は youtube-transcript-api、アーカイブ配信のチャットを扱う場合は pytchat、音声を文字起こしする場合はWhisperなど、目的に応じて別の方法を組み合わせます。

つまずきやすいポイント

APIが有効化されていない

APIキーを発行していても、プロジェクトでYouTube Data API v3を有効化していないとエラーになります。Google Cloud Consoleの「APIとサービス」から、有効化済みか確認してください。

APIキー制限が強すぎる

APIキーのアプリケーション制限やAPI制限が強すぎると、ローカルPCからのPython実行が拒否されることがあります。まずは動作確認し、その後で必要な制限を段階的に追加すると原因を切り分けやすいです。

APIキーをコードに直書きしている

APIキーをコードに直書きしたままGitHubなどに公開すると、第三者に使われるリスクがあります。.env や設定ファイルを使い、公開リポジトリには含めないようにしてください。

動画IDではなくURL全体を指定している

videos.listid には、URL全体ではなく動画IDを指定します。https://www.youtube.com/watch?v=...v= 以降を使ってください。

取得できない項目がある

動画によっては、コメント数や高評価数など一部の統計情報が取得できない場合があります。コードでは dict.get() を使い、項目が存在しない場合にも動くようにしておくと安全です。

次に読む記事

まとめ

この記事では、Google CloudでYouTube Data API v3を有効化し、APIキーを発行して、Pythonから動画情報を取得する最初の流れを紹介しました。

APIキーを安全に管理し、クォータを意識しながら使うことで、YouTube動画やチャンネルの公開データを分析に活用できます。次は、チャンネル単位の動画一覧取得や、字幕・チャット・文字起こしデータと組み合わせた分析に進むと、より実用的なYouTubeデータ活用につながります。

-YouTube, データ活用