質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2084閲覧

YouTube Data APIのvideoIdをまとめて取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

2クリップ

投稿2020/04/29 01:02

編集2020/04/29 01:41

##前提・実現したいこと
YouTube Data API v3を使って、データを取得したいと考えています。
search.listでデータを取得できましたが、次にvideos.listを使って、search.listで得た動画の再生回数などの情報をまとめて取得する方法を教えてください。

現状はsearch.listで得た動画のvideoIdを1個ずつ入力して情報を取得できますが、これをまとめて取得する方法がわかりません。

参考にした記事があるのですが、よくわからなかったので質問しました。
よろしくお願いします。

##該当のソースコード

from googleapiclient.discovery import build import pandas as pd YOUTUBE_API_KEY = 'APIキーは伏せておきます' youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY) def get_video_info(part,q,order,type,regionCode,maxResults): search_response = youtube.search().list( part=part, q=q, order=order, type=type, regionCode=regionCode, maxResults=maxResults ) response = search_response.execute() results = response['items'] keys = [] for i in results: key = i keys.append(key) df = pd.DataFrame(keys) df1 = pd.DataFrame(list(df['id']))['videoId'] df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']] df3 = pd.concat([df1,df2], axis =1) df3.to_csv('鬼滅の刃.csv',index=False) get_video_info(part='snippet',q='鬼滅の刃',order='rating',type='video',regionCode='JP',maxResults='5') videos_response = youtube.videos().list( part='statistics', #現状は、search.listで得た動画のvideoIdを1個ずつ入力しています。 id='_f7dv40gVMQ' ) response = videos_response.execute() results = response['items'][0] print(results)

##補足情報(FW/ツールのバージョンなど)
参考
Youtube Data APIを使ってPythonでYoutubeデータを取得する
PythonとYoutube Data API(v3)で再生数を取得する

YouTube Data API Videos: list
YouTube Data API キーワードで検索

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

videos().list()のidにはリストを渡すことができます。
断片的なコードで申し訳ありませんが、以下のように記述できます。

python

1# 動画IDのリストを作成 2ids = [item['id']['videoId'] for item in response['items']] 3 4# 動画の詳細な情報を取得 5videos_res = youtube.videos().list( 6 part='statistics', 7 id=','.join(ids) # カンマ区切りで複数のidを一度に渡せます 8 ).execute() 9

投稿2020/04/29 02:11

編集2020/04/29 02:14
autumn_nsn

総合スコア335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/25 23:18 編集

回答ありがとうございます。 教えていただいた通りに実行したら、うまくいきました。 もっときれいなコードが書けるように勉強します。 ありがとうございました。 ```python from googleapiclient.discovery import build import pandas as pd YOUTUBE_API_KEY = 'AIzaSyBvOoNgKkWu1jXNH7-knU9UwSBFdmvuUzw' youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY) def get_video_info(part,q,order,type,regionCode,maxResults): search_response = youtube.search().list( part=part, q=q, order=order, type=type, regionCode=regionCode, maxResults=maxResults ) response = search_response.execute() results = response['items'] keys = [] for i in results: key = i keys.append(key) df = pd.DataFrame(keys) df1 = pd.DataFrame(list(df['id']))['videoId'] df2 = pd.DataFrame(list(df['snippet']))[['channelTitle','publishedAt','channelId','title','description']] df3 = pd.concat([df1,df2], axis =1) ids = [item['id']['videoId'] for item in response['items']] videos_response = youtube.videos().list( part='statistics', id=','.join(ids) ) response1 = videos_response.execute() results1 = response1['items'] statistics = [] for i in results1: sta = i statistics.append(sta) df4 = pd.DataFrame(statistics) df5 = pd.DataFrame(list(df4['statistics']))[['viewCount','likeCount','dislikeCount','favoriteCount','commentCount']] df6 = pd.concat([df3,df5], axis =1) df6.to_csv('鬼滅の刃.csv',index=False) get_video_info(part='snippet',q='鬼滅の刃',order='rating',type='video',regionCode='JP',maxResults='2') ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問