- YouTubeの動画データ(再生回数、いいね数など)を取得するには?
- PythonでYouTube APIを扱うには?
本記事ではこのような疑問を解決します。
YouTubeにアップされている動画のタイトルや再生数、いいね数などの情報を一覧で取得できたら便利ですよね。
さらにcsvファイルなどに出力して分析を行えばマーケティング等に活かすことができます。
そこで今回はPythonによってYouTube APIで動画データを取得する方法を解説します。
なお、今回作成するプログラムは「任意の検索キーワードを入力するとそのキーワードがタイトルに入った動画一覧を再生回数が多い順に取得してcsvファイルに出力する」というものです。
エンジニアが副業を始めるには?エンジニアの副業にはどんな種類がある? 本記事ではこのような疑問を解決します。副業がブームになっている昨今、エンジニアほど副業をやりやすい職業はないでしょう。副業に関心があったり、副業をしてみたいと思っ[…]
APIキーを取得する
まずはYouTube APIを利用するためにGCP(Google Cloud Platform)で操作を行います。
GCPアカウントをまだお持ちでない方はこちらから作成してください。
(今回は無料の範囲内で利用可能です。)
それでは以下の手順でAPIキーを取得しましょう。
・GCPコンソールにアクセスする
・ナビゲーションメニューから「APIとサービス」を選択する
・「APIとサービス」のメニューから「ライブラリ」を選択する
・「YouTube Data API v3」と検索して選択する
(「YouTube」と入れれば予測変換で出てくる)
・「有効化」をクリックする
・「APIとサービス」のメニューに戻り、「認証情報」を選択する
・「+認証情報を作成」をクリックして「APIキー」を選択する
以上の操作でAPIキーが取得できました。
なお、APIキーについては名前や利用範囲を好きなように編集できます。
※今回はそのまま利用
環境を構築する
次にプログラムを動かすための環境を構築していきます。
今回使用するPythonのパッケージ管理ツールにはPoetryを使用します。
(もちろんpipなどでも問題ありません。)
Poetryがインストールされていない場合は、
Poetry公式ドキュメントに沿ってインストールしてください。
それではPoetryで環境を構築していきます。
ちなみに、バージョンは以下の通りです。
・Python 3.10.5
・Poetry 1.1.14
最初にPoetryプロジェクトを作成しましょう。
$ poetry new youtube_api
※プロジェクト名は好きなものに変えてもらってOKです。
作成したプロジェクトのディレクトリに移動します。
$ cd youtube_api
必要なPythonライブラリをインストールします。
$ poetry add google-api-python-client pandas
最後に今回コードを記述するPythonファイルを作成しておきましょう。
$ touch main.py
これで以下のディレクトリ構成になっているはずです。
youtube_api ├── pyproject.tomol ├── poetry.lock ├── main.py ├── README.rst ├── youtube_api └── (中身省略) ├── tests └── (中身省略)
フリーランスエンジニアが案件獲得方法とは?自ら営業せずに案件を獲得するには?実務経験1年未満でも大丈夫なの? 本記事ではこのような疑問を解決します。これからフリーランスエンジニアとして独立したい方は、兎にも角にも案件の獲得が急務です[…]
Pythonコードを記述する
ここまででコードを書く準備が整いました。
実際に記述するコードは以下の通りです。
import argparse
from apiclient.discovery import build
import pandas as pd
YOUTUBE_API_KEY = '取得したAPIキー'
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"
youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=YOUTUBE_API_KEY)
# 動画の再生回数やいいね数、お気に入り数などを取得する処理
def get_statistics(id):
statistics = youtube.videos().list(part='statistics', id=id).execute()['items'][0]['statistics']
return statistics
# 動画データ一覧を取得する処理
def get_video_info(part, q, order, type, num):
search_list = []
for i in range(num):
if i == 0:
search_query = youtube.search().list(
part=part,
q=q,
order=order,
type=type,
maxResults=10,# maxResults→5~50
)
else:
search_query = youtube.search().list_next(
search_query,
api_response,
)
api_response = search_query.execute()
search_response = api_response.get("items", [])
for v in search_response:
id = v["id"]["videoId"]
title = v["snippet"]["title"]
description = v["snippet"]["description"]
channel_title = v["snippet"]["channelTitle"]
statistics = get_statistics(id)
if "viewCount" in statistics:
view_count = statistics["viewCount"]
else:
view_count = 0
if "likeCount" in statistics:
like_count = statistics["likeCount"]
else:
like_count = 0
if "favoriteCount" in statistics:
favorite_count = statistics["favoriteCount"]
else:
favorite_count = 0
if "commentCount" in statistics:
comment_count = statistics["commentCount"]
else:
comment_count = 0
url = 'https://www.youtube.com/watch?v=%s' % id
published_at = v["snippet"]["publishedAt"]
result = [id, title, description, channel_title, view_count, like_count, favorite_count, comment_count, url, published_at]
search_list.append(result)
return search_list
def main(args):
data = get_video_info(part='snippet', q=args.keyword, order='viewCount', type='video', num=args.num)
df = pd.DataFrame(data, columns=['ID', 'タイトル', '説明', 'チャンネル名', '再生回数', 'いいね数', 'お気に入り数', 'コメント数', 'URL', '公開日時'])
df.to_csv('video_list.csv')
if __name__ == '__main__':
parser = argparse.ArgumentParser(
add_help=True
)
subparsers = parser.add_subparsers()
parser_convert = subparsers.add_parser('get_video_list', help='get video list')
parser_convert.add_argument('--keyword', '-k', required=True)
parser_convert.add_argument('--num', '-n', required=True, type=int)
parser_convert.set_defaults(handler=main)
args = parser.parse_args()
if hasattr(args, 'handler'):
args.handler(args)
else:
parser.print_help()
今回は一度に取得できる動画件数を10件とし、
get_video_info()の引数numに渡した値分処理を繰り返します。
つまり、一回のコマンド実行で「10件 × num回」分の動画件数を取得することができます。
プログラムを動かしてみる
最後に実際にプログラムを動かしてみましょう。
今回のプログラムではコマンドライン引数に検索キーワード(-k)と取得回数(-n)を指定します。
以下のコマンドを実行します。
$ poetry run python main.py get_video_list -k "プログラミング" -n 3
※タイトルに「プログラミング」が入っている動画を再生回数が多い順に30件取得する
実際に出力されたcsvファイルは以下の通りです。
これで無事にYouTubeから動画データを取得することができました!
まとめ
以上がPythonによってYouTube APIで動画データを取得する方法になります。
簡単な手順で自由に任意の動画データを取得することができました。
SNSの市場調査をはじめとしたマーケティング等に役立ててみてください!