検索ワードからyoutubeの動画情報を一括で取得する 【python + youtube api】
今回はこんな声に対応するガジェットです。
「pythonを動画で勉強したいので一覧が欲しい。視聴回数の多いものから片っ端に視聴し実行してみよう!」
「Youtuberのネタを探したいけど、そのネタどのくらいの視聴回数、いいねがあるのか確認したい!」
youtubeの情報一括で取得します
youtubeからタイトル、URL、再生時間、視聴回数、いいね数などをまとめてyoutube APIで取得し一覧にするガジェットです。APIなのでyoutubeのサイトで一つずつ検索することもなく一括で票を取得できます。
このガジェットでできることはこちら
- 検索したいキーワードに関連する動画の情報を取得できます。
- 再生時間や視聴回数、いいねの数を確認できます。
- URLも記載しているので直接動画に飛ぶことができます。
- 視聴回数順に並べていますので一覧で確認できます。
注意点はこちら
- 今回の設定では、視聴回数が◯◯回以上、いいねが◯◯回以上といった条件はつけていないため、そのような条件をつけるときは別途設定が必要です。
- 取得数も1ページ目から取得という設定にしていますので、もっとたくさんの動画を設定する際は別途設定が必要です。
評価(自己)
役立ち度 ★★★★(良し)
効率化 ★★★★(良し)
ミス防止 ★★★★(良し)
楽しさ ★★★★(良し)
操作性 ★★★★(良し)
今回のコード
# get_youtubeinfo.py from googleapiclient.discovery import build import pandas as pd import json def main(): # jsonfileに保存しているapikeyを読み込み with open('secret.json', 'r') as f: API_KEY = json.load(f) # api_kyでyoutube Data APIを呼び出す api_key = API_KEY['API_KEY'] youtube_search = build('youtube', 'v3', developerKey=api_key) # 今回検索するキーワード search_key = 'python' # 検索のパラメータ設定 request_search = youtube_search.search().list( q=search_key, part='id, snippet', type="video", maxResults=25) # 検索実行 res = request_search.execute() # 検索結果からタイトルとvideoのIDを取得しそれぞれリストに titles = [] ids = [] for item in res['items']: titles.append(item['snippet']['title']) ids.append(item['id']['videoId']) # タイトルとIDのデータフレームを作成し追加 data = pd.DataFrame() data['タイトル'] = titles data['ID'] = ids # 各動画ごとに詳細情報取得 _data = pd.DataFrame() for i in ids: get_info = youtube_search.videos().list( id = i, part = 'snippet, contentDetails, statistics' ) response = get_info.execute() playback_time = response['items'][0]['contentDetails']['duration'].replace('PT', '').replace('H', '時間').replace('M', '分').replace('S', '秒') publisthday = response['items'][0]['snippet']['publishedAt'].split('T')[0] viewcount = response['items'][0]['statistics']['viewCount'] likecount = response['items'][0]['statistics']['likeCount'] d = pd.DataFrame(dict(ID=i, 再生時間=playback_time, 公開日=publisthday, 視聴回数=viewcount, いいね=likecount), index=[0]) _data = pd.concat([_data, d]) # 2つのデータフレームをマージ detail_data = pd.merge(data, _data, on='ID', how='left') #視聴回数といいねを整数にしインでッックスもリセット、視聴回数で並び替え detail_data['視聴回数'] = detail_data['視聴回数'].astype(int) detail_data['いいね'] = detail_data['いいね'].astype(int) detail_data.reset_index(drop=True) detail_data = detail_data.sort_values('視聴回数', ascending=False) detail_data['ID'] = 'https://www.youtube.com/watch?v=' + detail_data['ID'] detail_data.rename(columns={'ID': 'URL'}) # csvで吐き出し detail_data.to_csv('youtube_data.csv', index=False) if __name__ == '__main__': main()