YouTubeデータ取得 データ取得

YouTube Data API v3入門|APIキーで動画情報を取得するPython手順

2023年8月26日

この記事では、YouTube Data API v3を使い、Pythonから動画情報を取得する基本手順をまとめます。

YouTube関連データを扱う方法には、公式API、字幕取得ライブラリ、yt-dlp、Whisperなど複数あります。その中でYouTube Data APIは、動画タイトル、チャンネル情報、公開日、再生数、コメント数などのメタデータを取得するための公式APIです。

この記事でできること

  • YouTube Data APIで取得できる情報を確認する
  • APIキーをPythonから読み込む
  • videos.list で動画情報を取得する
  • 取得結果からタイトル、公開日、再生数などを取り出す
  • 次に読むチャンネル動画一覧取得記事へつなげる

YouTube Data APIで取得できるもの

YouTube Data API v3では、動画、チャンネル、再生リスト、コメントなどの公開情報を取得できます。たとえば、動画情報を取得する videos.list では、リクエストに一致する動画リソースの一覧が返ります。公式ドキュメントでは、このメソッドのクォータコストは1ユニットとされています。

Videos: list - YouTube Data API

取得対象代表的なAPI
動画情報videos.listタイトル、説明文、公開日、再生数、高評価数など
チャンネル情報channels.listチャンネル名、登録者数、アップロード再生リストIDなど
再生リスト内の動画playlistItems.listチャンネルに投稿された動画一覧など
検索結果search.listキーワードや条件に合う動画・チャンネル

字幕本文、音声、動画ファイルそのものを取得するAPIではありません。字幕や文字起こしを扱う場合は、別の方法と役割を分けて考えます。

利用上の注意

  • APIキーを公開しない
  • 取得できるのはAPIで提供されている範囲の情報に限られる
  • クォータ消費を意識し、必要なAPIだけ呼び出す
  • 大量取得や再配布前提の使い方は避ける
  • YouTube API Servicesの利用規約やポリシーを確認する

Googleの公式ドキュメントでは、APIにはクォータがあり、メソッドごとにコストが設定されています。特に search.list は便利ですがコストが高いため、動画一覧取得では後述する playlistItems.list を使うほうが扱いやすいです。

Quota Calculator - YouTube Data API

APIキーを用意する

Google Cloud Consoleでプロジェクトを作成し、YouTube Data API v3を有効化したうえでAPIキーを発行します。キーはPythonコードに直接書かず、.env で管理します。

YOUTUBE_API_KEY=ここにAPIキーを書く

APIキーの管理方法は、次の記事で整理しています。

APIキーを外部ファイルで管理する方法|.envとconfig.iniの使い分け

必要なライブラリをインストールする

この記事では、まず requests でHTTPリクエストを送る方法を使います。公式クライアントライブラリもありますが、最初はURLとパラメータの関係が見えるほうが理解しやすいです。

pip install requests python-dotenv

動画IDから動画情報を取得する

まず、1本の動画IDを指定して、タイトル、公開日、再生数などを取得します。

import os

import requests
from dotenv import load_dotenv

load_dotenv()

API_KEY = os.getenv("YOUTUBE_API_KEY")

if not API_KEY:
    raise RuntimeError("YOUTUBE_API_KEY が設定されていません")

VIDEO_ID = "dQw4w9WgXcQ"

url = "https://www.googleapis.com/youtube/v3/videos"
params = {
    "part": "snippet,statistics,contentDetails",
    "id": VIDEO_ID,
    "key": API_KEY,
}

response = requests.get(url, params=params, timeout=30)
response.raise_for_status()

data = response.json()

if not data["items"]:
    raise RuntimeError("動画が見つかりませんでした")

item = data["items"][0]

snippet = item["snippet"]
statistics = item.get("statistics", {})

print("title:", snippet["title"])
print("published_at:", snippet["publishedAt"])
print("channel_title:", snippet["channelTitle"])
print("view_count:", statistics.get("viewCount"))

part には、取得したい情報のまとまりを指定します。基本的には、タイトルや公開日なら snippet、再生数やコメント数なら statistics、動画時間なら contentDetails を使います。

取得結果を整形する

後から分析に使う場合は、APIレスポンスをそのまま保存するより、必要な項目だけを辞書にまとめると扱いやすくなります。

video = {
    "video_id": item["id"],
    "title": snippet["title"],
    "published_at": snippet["publishedAt"],
    "channel_id": snippet["channelId"],
    "channel_title": snippet["channelTitle"],
    "view_count": int(statistics.get("viewCount", 0)),
    "like_count": int(statistics.get("likeCount", 0)),
    "comment_count": int(statistics.get("commentCount", 0)),
    "duration": item["contentDetails"]["duration"],
}

print(video)

高評価数やコメント数は、動画や設定によって取得できない場合があります。そのため、get() を使って欠損に備えます。

CSVに保存する

1本だけでも、CSV保存まで確認しておくと、複数動画へ拡張しやすくなります。

import csv
from pathlib import Path

output_dir = Path("outputs/youtube")
output_dir.mkdir(parents=True, exist_ok=True)

csv_path = output_dir / "video_info.csv"

with csv_path.open("w", encoding="utf-8-sig", newline="") as f:
    writer = csv.DictWriter(f, fieldnames=video.keys())
    writer.writeheader()
    writer.writerow(video)

print(f"saved: {csv_path}")

よくあるエラー

APIキーが設定されていない

YOUTUBE_API_KEY が読み込めていない場合は、.env の場所、変数名、仮想環境の作業ディレクトリを確認します。

403エラーが出る

APIが有効化されていない、APIキー制限が合っていない、クォータを使い切っている、といった可能性があります。Google Cloud Console側の設定を確認します。

itemsが空になる

動画IDが間違っている、動画が削除・非公開になっている、地域や権限の都合で取得できない、といった可能性があります。

他のYouTube取得方法との違い

方法向いている用途
YouTube Data API動画・チャンネル・再生リストなどのメタデータ取得
youtube-transcript-api字幕がある動画の字幕取得
yt-dlp許諾済み素材の音声・字幕取得や前処理
Whisper字幕がない許諾済み音声の文字起こし
pytchatチャット取得の検証。ただし保守停止中のため注意

まず公式APIで取得できる情報は公式APIを使い、字幕や音声など公式APIの範囲外のものは目的と権利関係を確認して別手段を検討する、という切り分けが扱いやすいです。

次に読む記事

まとめ

YouTube Data API v3を使うと、動画IDからタイトル、公開日、チャンネル情報、再生数などのメタデータを取得できます。まずは videos.list で1本の動画情報を取得し、レスポンスの構造を確認すると理解しやすいです。

複数動画を扱う場合は、チャンネルのアップロード再生リストから動画一覧を取得し、必要に応じて videos.list で統計情報を補う流れに進むと、クォータを抑えながら分析用データを作れます。

-YouTubeデータ取得, データ取得