いくつかの参考動画にしたがって、PythonでYouTube Data API v3のSearch:Listをテスト実行させた際のメモ書きを共有します。
PythonでYouTube Data APIを利用するには、前提としてGCP(Google Cloud Platform)でAPIキーを作成することが必要になります。APIキーの作成方法や必要なライブラリについては、 PythonでYouTube Data APIを利用!GCPでのAPIキー作成から解説 の記事を参考にしてください。
目次:
- PythonでYouTube Data API v3のSearch:List操作する際に参考にした動画
- YouTube Data APIドキュメント上でのテスト実行
- YouTube Data APIを利用するPythonによるコーディング例
- YouTube Data APIと通信し、Serviceオブジェクトの生成
- search().list()メソッドによってYouTube内の動画・チャンネル・プレイリストをキーワード検索
- search.list()メソッドのオプションを一部解説
- 月ごとに何本の動画がアップロードされているか、月ごとの投稿本数を調べる
- YouTube Data APIで実装したものを手早く共有したい場合、StreamlitおよびStreamlit Community Cloudがおすすめ
PythonでYouTube Data API v3のSearch:List操作する際に参考にした動画
参考にした動画はこちら。
(Python)YouTube Data API v3 Search:List(YouTubeデータ分析) - YouTube
YouTube API を使って YouTube をマーケティング的に活用。本動画では 2016年 1月から 2019年10月までの "Kotlin" の各月アップロード数を抽出。そして CSV に自動保存。
YouTube Data APIドキュメント上でのテスト実行
YouTube Data API のドキュメント内からテストが可能です。まずは、YouTube Data APIのSearch()の挙動がどのようなものか確認するため、ドキュメントからテストを実行してみます。
YouTube Data APIを利用するPythonによるコーディング例
APIキーの取得等については PythonでYouTube Data APIを利用!GCPでのAPIキー作成から解説 を参照。
利用するAPIは YouTube Data API v3 でOK。
YouTube Data APIと通信し、Serviceオブジェクトの生成
import os
from googleapiclient.discovery import build # ライブラリのインポート
api_key = os.environ['GOOGLE_API_KEY'] # 自分のAPIキーを格納
service = build('youtube', 'v3', developerKey=api_key) # build関数を実行し、serviceオブジェクトを生成
search().list()メソッドによってYouTube内の動画・チャンネル・プレイリストをキーワード検索
下のコード例では、“python” というキーワードを含む動画を検索しています。search().list()メソッドを利用してリクエストを実行します。
serviceオブジェクトが持っているメソッドについては google-api-python-client | YouTube Data API v3 | Instance Methods を参照してください。
request_python = service.search().list(
# 下記、検索条件(フィルタ)
q = 'python',
part = 'snippet',
# 以下は任意オプションの例
type = 'video', # channel, playlist, video. 'video,channel'のように複数指定も可
videoCategoryId = '27', # 27:Education
maxResults = 10, # デフォルト値では5。0〜50の間で指定
publishedAfter = "2016-01-01T00:00:00Z", # から(from)
publishedBefore = "2019-11-01T00:00:00Z" # まで(to)
)
search.list()メソッドのオプションを一部解説
上コード search.list()メソッドのオプションの一部を解説します。
■ partについて:
どのようなデータを抽出するか?を選択できます。しかし、search().list()においては”snippet”というものしか選択できません。
他のメソッド、たとえばvideo().list()では、”statistics”, “status”など、複数同時に選択することも可能です。statisticsにおいては、視聴回数やチャンネル登録者数などを確認できます。
■ maxResultsについて:
The maxResults parameter specifies the maximum number of items that should be returned in the result set. Acceptable values are 0 to 50, inclusive. The default value is 5.
■ videoCategoryについて: VideoCategories | YouTube DataAPI
VideoCategoryId : youtube api video category id list
必須のpartパラメータについて:
このパラメータでは、API レスポンスに含める必要がある 1 つ以上の最上位レベル(ネストされていない)のリソース プロパティを指定します。
YouTube Data API の概要 | Google Developers | partパラメータについて
つまり、APIレスポンスに含めたい内容(取得したい内容)を指定します。
次に、作成したリクエストを実行します。
#リクエストを実行してレスポンスとして格納
response_python = request_python.execute()
下記のように辞書型のデータが返ってきます。
{'kind': 'youtube#searchListResponse',
'etag': 'xPWthlRGZ_WGWHyadmRad7bo34w',
'nextPageToken': 'CAUQAA',
'regionCode': 'JP',
'pageInfo': {'totalResults': 1000000, 'resultsPerPage': 5},
'items': [{'kind': 'youtube#searchResult',
'etag': 'Jvcg77b5RVtndP-Syrwq8KpMclk',
'id': {'kind': 'youtube#video', 'videoId': 'rfscVS0vtbw'},
'snippet': {'publishedAt': '2018-07-11T18:00:42Z',
'channelId': 'UC8butISFwT-Wl7EV0hUK0BQ',
'title': 'Learn Python - Full Course for Beginners [Tutorial]',
'description': "This course will give you a full introduction into all of the core concepts in python. Follow along with the videos and you'll be a ...",
'thumbnails': {'default': {'url': 'https://i.ytimg.com/vi/rfscVS0vtbw/default.jpg',
'width': 120,
'height': 90},
...
'width': 480,
'height': 360}},
'channelTitle': 'freeCodeCamp.org',
'liveBroadcastContent': 'none',
'publishTime': '2019-05-02T12:05:54Z'}}]}
辞書型のため、キーを指定して値を取り出すことが出来ます。以下に返り値の扱いの例を載せておきます。
- ‘python’で検索した場合にヒットした検索結果総数だけを取り出したい時
response_python['pageInfo']['totalResults'] // 340639
- レスポンスとして返ってきた検索結果の個数を確認(通常はmaxResultsの値と一致)
len(response['items']) // 10
- 返ってきた最初の動画タイトルを表示
response['items'][0]['snippet']['title']
- レスポンスとして返ってきた全ての動画タイトルと説明文を表示
for item in response['items']:
print(item['snippet']['title'])
print('\t', item['snippet']['description'])
search()メソッドについて: YouTube Data API v3 . search
月ごとに何本の動画がアップロードされているか、月ごとの投稿本数を調べる
下記の動画とソースコードを参照してください。
post★YouTubeAPI_Demo.ipynb - Colaboratory
# Kotlin
def my_function():
request_kotlin = my_youtube.search().list( q="kotlin", part="snippet", type="video", videoCategoryId="27",publishedAfter=my_publishedAfter, publishedBefore=my_publishedBefore)
response_kotlin = request_kotlin.execute()
kotlin_youtube = response_kotlin["pageInfo"]["totalResults"]
print(response_kotlin)
print("Kotlin: " + str(kotlin_youtube))
with open('YouTubeAPI_Kotlin.csv', 'a') as csvFile:
writer = csv.writer(csvFile)
writer.writerow([str(y), str(i), str(kotlin_youtube)])
csvFile.close()
year = ['2016', '2017', '2018', '2019']
month = []
for i in range(1, 13):
if 0 < i < 10:
month.append('0' + str(i))
else:
month.append(str(i))
import csv
for y in year:
i = 0
while i < 12:
if i == 11:
i = i + 1
my_publishedAfter = str(y) + "-12-01T00:00:00Z"
yy = int(y) + 1
my_publishedBefore = str(yy) + "-01-01T00:00:00Z"
my_function()
break
else:
# from "my_publishedAfter" to "my_publishedBefore"
after_month = month[i]
i = i + 1
before_month = month[i]
my_publishedAfter = y + "-" + after_month + "-01T00:00:00Z"
my_publishedBefore = y + "-" + before_month + "-01T00:00:00Z"
my_function()
YouTube Data APIで実装したものを手早く共有したい場合、StreamlitおよびStreamlit Community Cloudがおすすめ
YouTube Data APIは無料利用の場合には一定の利用回数制限があり、便利ですが一般公開させるには大きなハードルがあります。
API利用の際のQuota(利用上限)について参考: PythonでYouTube Data APIを利用!GCPでのAPIキー作成から解説
しかし、「社内やチーム内のみで利用したい」という場合も多いはず。そのような場合には、Streamlitというライブラリを用いてフロントを実装し、Streamlit Community Cloudで公開するのがおすすめです。
参考: Streamlit Community CloudでWebアプリを公開する際の準備事項
Streamlitを利用すれば、Pythonのみでフロントを実装することが可能です。細かな調整は難しいですが、ざっくり実装したい場合にはおすすめ。
この記事の気になった箇所を読み返す:
- PythonでYouTube Data API v3のSearch:List操作する際に参考にした動画
- YouTube Data APIドキュメント上でのテスト実行
- YouTube Data APIを利用するPythonによるコーディング例
- YouTube Data APIと通信し、Serviceオブジェクトの生成
- search().list()メソッドによってYouTube内の動画・チャンネル・プレイリストをキーワード検索
- search.list()メソッドのオプションを一部解説
- 月ごとに何本の動画がアップロードされているか、月ごとの投稿本数を調べる
- YouTube Data APIで実装したものを手早く共有したい場合、StreamlitおよびStreamlit Community Cloudがおすすめ
Category: 開発・プログラミング | エンジニアリング
Tags: Python | YouTube・動画発信 | API