はじめに
YouTube Data API を触る機会があったので、情報をまとめたいと思います。
YouTube Data API とは
YouTube が提供している API で、動画やチャンネルなど情報を取得して、自分の Web サイトやアプリケーションで使用することができます。
一日あたりのAPI使用量(クォータ)の上限が10000になっているので、注意して使用してください。
API キーを取得する
Google Cloud Platform で プロジェクトを作成
ここから プロジェクトを作成します。
プロジェクト名は任意で、 プロジェクト ID は忘れずに変更しましょう。

YouTube Data API v3 を有効化
作成したプロジェクトで YouTube Data API を使用するため、有効にします。
ここからプロジェクトを選択した後、有効にします。

認証情報の作成
ここから API キーを作成します。

作成した API キーは、実際に API を使う時に使用しますので、メモしておいてください。
YouTube Data API でいろんな情報を取得してみる
必要なパッケージをインストール
pyenv を使用して python のバージョンを変えておきます。
$ pyenv install 3.8.3
$ pyenv local 3.8.3
YouTube Data API を使用するためのパッケージをインストールします。
$ pip install google-api-python-client==1.9.3
YouTube チャンネル情報を検索
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from apiclient.discovery import build
API_KEY = '<取得した API キーを入力します>'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
SEARCH_TEXT = '<検索したいチャンネル名>'
youtube = build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=API_KEY
)
response = youtube.search().list(q=SEARCH_TEXT, part='id,snippet', maxResults=25).execute()
for item in response.get('items', []):
if item['id']['kind'] != 'youtube#channel':
continue
print('*' * 10)
print(json.dumps(item, indent=2, ensure_ascii=False))
print('*' * 10)
↓結果はこんな感じ↓
**********
{
"kind": "youtube#searchResult",
"etag": "jjisWD5m1O7aBCLstjwy_ldRnf4",
"id": {
"kind": "youtube#channel",
"channelId": "UCTmRAt3wuYY8W5z9j9va97Q"
},
"snippet": {
"publishedAt": "2017-12-13T04:47:03Z",
"channelId": "UCTmRAt3wuYY8W5z9j9va97Q",
"title": "Yahoo!デベロッパーネットワーク",
"description": "Yahoo! JAPAN Technology channel produced by Yahoo! JAPAN.",
"thumbnails": {
"default": {
"url": "https://yt3.ggpht.com/-ZUW9jc79uzQ/AAAAAAAAAAI/AAAAAAAAAAA/LWM2XNvQPmI/s88-c-k-no-mo-rj-c0xffffff/photo.jpg"
},
"medium": {
"url": "https://yt3.ggpht.com/-ZUW9jc79uzQ/AAAAAAAAAAI/AAAAAAAAAAA/LWM2XNvQPmI/s240-c-k-no-mo-rj-c0xffffff/photo.jpg"
},
"high": {
"url": "https://yt3.ggpht.com/-ZUW9jc79uzQ/AAAAAAAAAAI/AAAAAAAAAAA/LWM2XNvQPmI/s800-c-k-no-mo-rj-c0xffffff/photo.jpg"
}
},
"channelTitle": "Yahoo!デベロッパーネットワーク",
"liveBroadcastContent": "none",
"publishTime": "2017-12-13T04:47:03Z"
}
}
**********
YouTube チャンネルの詳細情報を取得
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from apiclient.discovery import build
API_KEY = '<取得した API キーを入力します>'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
CHANNEL_ID = '<取得したチャンネル ID>'
youtube = build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=API_KEY
)
response = youtube.channels().list(
part = 'snippet,statistics',
id = CHANNEL_ID
).execute()
for item in response.get("items", []):
if item["kind"] != "youtube#channel":
continue
print('*' * 10)
print(json.dumps(item, indent=2, ensure_ascii=False))
print('*' * 10)
↓結果はこんな感じ↓
**********
{
"kind": "youtube#channel",
"etag": "itHsa0qDp15obMLvkpN6HnFjF_M",
"id": "UCTmRAt3wuYY8W5z9j9va97Q",
"snippet": {
"title": "Yahoo!デベロッパーネットワーク",
"description": "Yahoo! JAPAN Technology channel produced by Yahoo! JAPAN.",
"customUrl": "yahoodevelopernetworkjp",
"publishedAt": "2017-12-13T04:47:03Z",
"thumbnails": {
"default": {
"url": "https://yt3.ggpht.com/a/AATXAJzznTJCL9uFV63JvRtbeYwgzur7mwoqtPRQvg=s88-c-k-c0xffffffff-no-rj-mo",
"width": 88,
"height": 88
},
"medium": {
"url": "https://yt3.ggpht.com/a/AATXAJzznTJCL9uFV63JvRtbeYwgzur7mwoqtPRQvg=s240-c-k-c0xffffffff-no-rj-mo",
"width": 240,
"height": 240
},
"high": {
"url": "https://yt3.ggpht.com/a/AATXAJzznTJCL9uFV63JvRtbeYwgzur7mwoqtPRQvg=s800-c-k-c0xffffffff-no-rj-mo",
"width": 800,
"height": 800
}
},
"localized": {
"title": "Yahoo!デベロッパーネットワーク",
"description": "Yahoo! JAPAN Technology channel produced by Yahoo! JAPAN."
},
"country": "JP"
},
"statistics": {
"viewCount": "7471",
"commentCount": "0",
"subscriberCount": "157",
"hiddenSubscriberCount": false,
"videoCount": "12"
}
}
**********
YouTube チャンネルが公開している動画の情報を取得
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from apiclient.discovery import build
API_KEY = '<取得した API キーを入力します>'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
CHANNEL_ID = '<取得したチャンネル ID>'
youtube = build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=API_KEY
)
response = youtube.search().list(
part = "snippet",
channelId = CHANNEL_ID,
maxResults = 1,
order = "date" #日付順にソート
).execute()
for item in response.get("items", []):
if item["id"]["kind"] != "youtube#video":
continue
print('*' * 10)
print(json.dumps(item, indent=2, ensure_ascii=False))
print('*' * 10)
↓結果はこんな感じ↓
**********
{
"kind": "youtube#searchResult",
"etag": "CtC0g1Ocx7pK6H8Yhd3hGS5z3uY",
"id": {
"kind": "youtube#video",
"videoId": "vd3YVCtW-LY"
},
"snippet": {
"publishedAt": "2020-02-20T06:02:39Z",
"channelId": "UCTmRAt3wuYY8W5z9j9va97Q",
"title": "新しいHTML portal を利用した画面遷移設計 〜PayPayモールとYahoo!ニュースの事例を添えて〜 / Developers Summit 2020 14-A-2",
"description": "Developers Summit 2020 でのセッションの動画です。 portal について説明しています。 登壇概要はこちら https://event.shoeisha.jp/devsumi/20200213/session/2384/...",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/vd3YVCtW-LY/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/vd3YVCtW-LY/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/vd3YVCtW-LY/hqdefault.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "Yahoo!デベロッパーネットワーク",
"liveBroadcastContent": "none",
"publishTime": "2020-02-20T06:02:39Z"
}
}
**********
動画の詳細情報を取得
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from apiclient.discovery import build
API_KEY = '<取得した API キーを入力します>'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'
CHANNEL_ID = '<取得したチャンネル ID>'
VIDEO_ID_LIST = ['<取得した動画 ID>']
youtube = build(
YOUTUBE_API_SERVICE_NAME,
YOUTUBE_API_VERSION,
developerKey=API_KEY
)
for video_id in VIDEO_ID_LIST:
response = youtube.videos().list(
part = 'snippet,statistics',
id = video_id
).execute()
for item in response.get("items", []):
if item["kind"] != "youtube#video":
continue
print('*' * 10)
print(json.dumps(item, indent=2, ensure_ascii=False))
print('*' * 10)
↓結果はこんな感じ↓
**********
{
"kind": "youtube#video",
"etag": "Y5QH8Ur-9BQigbr4XHTRNldn7_I",
"id": "vd3YVCtW-LY",
"snippet": {
"publishedAt": "2020-02-20T06:02:39Z",
"channelId": "UCTmRAt3wuYY8W5z9j9va97Q",
"title": "新しいHTML portal を利用した画面遷移設計 〜PayPayモールとYahoo!ニュースの事例を添えて〜 / Developers Summit 2020 14-A-2",
"description": "Developers Summit 2020 でのセッションの動画です。\nportal について説明しています。\n\n登壇概要はこちら\nhttps://event.shoeisha.jp/devsumi/20200213/session/2384/\n\n資料はこちら\nhttps://www.slideshare.net/techblogyahoo/htmlportal-paypayyahoo-devsumi",
"thumbnails": {
"default": {
"url": "https://i.ytimg.com/vi/vd3YVCtW-LY/default.jpg",
"width": 120,
"height": 90
},
"medium": {
"url": "https://i.ytimg.com/vi/vd3YVCtW-LY/mqdefault.jpg",
"width": 320,
"height": 180
},
"high": {
"url": "https://i.ytimg.com/vi/vd3YVCtW-LY/hqdefault.jpg",
"width": 480,
"height": 360
}
},
"channelTitle": "Yahoo!デベロッパーネットワーク",
"tags": [
"devsumi",
"devsumiA",
"Portals"
],
"categoryId": "28",
"liveBroadcastContent": "none",
"defaultLanguage": "ja",
"localized": {
"title": "新しいHTML portal を利用した画面遷移設計 〜PayPayモールとYahoo!ニュースの事例を添えて〜 / Developers Summit 2020 14-A-2",
"description": "Developers Summit 2020 でのセッションの動画です。\nportal について説明しています。\n\n登壇概要はこちら\nhttps://event.shoeisha.jp/devsumi/20200213/session/2384/\n\n資料はこちら\nhttps://www.slideshare.net/techblogyahoo/htmlportal-paypayyahoo-devsumi"
},
"defaultAudioLanguage": "ja"
},
"statistics": {
"viewCount": "74",
"likeCount": "2",
"dislikeCount": "0",
"favoriteCount": "0",
"commentCount": "0"
}
}
**********
お知らせ
Webサイト・ツール・LP作成のご依頼は、
こちらからお問い合わせいただけます。お気軽にご相談ください。
さいごに
いかがだったでしょうか?
他にもコードサンプルで色々と公開されているので、そちらを見ながら是非試してみてください。
間違っているところなどありましたら、コメントくださいmm