前提・実現したいこと
例としてホロライブ所属の鷹嶺ルイ氏のチャンネルを例に挙げる。
彼女のチャンネルでは「ほぼ毎日ショート」の名を冠する投稿が今日までに40本ほどある。これをAPIで数値として出力したいと思ったが、浅学故詰まってしまったためご助力願いたい。
python3.8.5
試行1
from apiclient.discovery import build API_KEY = "自分のAPIキー" cid = "UCs9_O1tRPMQTHQ-N_L6FU2g"#鷹嶺ルイ vid = "Re3IIEU_vdE"#鷹嶺ルイ ほぼ毎日ショート#38 def YoutubeDetails(vid, API_KEY): API_SERVICE_NAME = "youtube" API_VERSION = "v3" youtube = build(API_SERVICE_NAME, API_VERSION, developerKey=API_KEY) response = youtube.videos().list( part = "id", id = vid, # channelId = cid, # q = "ほぼ毎日ショート",, ).execute() return response["pageInfo"] test = YoutubeDetails(vid, API_KEY) test
当然問題なく出力されたが、idにvideoId(ここではvid)を一件しか代入していないので
{'totalResults': 1, 'resultsPerPage': 1}
と一件しか出ない。私が行いたいのはチャンネル内での該当件数なのでダメもとで以下を追加。当然エラーになった。
該当のソースコード&エラー
from apiclient.discovery import build API_KEY = "自分のAPIキー" cid = "UCs9_O1tRPMQTHQ-N_L6FU2g"#鷹嶺ルイ vid = "Re3IIEU_vdE"#鷹嶺ルイ ほぼ毎日ショート#38 def YoutubeDetails(cid, vid, API_KEY): #cid追加 API_SERVICE_NAME = "youtube" API_VERSION = "v3" youtube = build(API_SERVICE_NAME, API_VERSION, developerKey=API_KEY) response = youtube.videos().list( part = "id", id = vid, channelId = cid, #追加 q = "ほぼ毎日ショート", #追加 ).execute() return response["pageInfo"] test = YoutubeDetails(cid, vid, API_KEY) #cid追加 test
TypeError Traceback (most recent call last) <ipython-input-17-3b2c91a39a9d> in <module> 22 return response["pageInfo"] 23 ---> 24 test = YoutubeDetails(cid, vid, API_KEY) 25 26 test <ipython-input-17-3b2c91a39a9d> in YoutubeDetails(cid, vid, API_KEY) 13 youtube = build(API_SERVICE_NAME, API_VERSION, developerKey=API_KEY) 14 ---> 15 response = youtube.videos().list( 16 part = "id", 17 id = vid, ~\anaconda3\lib\site-packages\googleapiclient\discovery.py in method(self, **kwargs) 1017 for name in kwargs: 1018 if name not in parameters.argmap: -> 1019 raise TypeError('Got an unexpected keyword argument {}'.format(name)) 1020 1021 # Remove args that have a value of None. TypeError: Got an unexpected keyword argument channelId
channelIdとqはyoutube.videos()ではなくyoutube.search()のパラメータなのでエラーになるのは当然。しかしyoutube.search()では'totalResults'がないため私が欲しい情報が出ず困ってしまっている。
searchのAPIでもtotalResultsは帰ってきますよ
YoutubeAPIのリファレンスのページで試せるので確認してはどうですか?
私が試したら
{
"kind": "youtube#searchListResponse",
"etag": "U4qDFM32mY0XgJYC06dTPfz6rgE",
"nextPageToken": "CAUQAA",
"regionCode": "JP",
"pageInfo": {
"totalResults": 122,
"resultsPerPage": 5
},
"items": [
こんな感じで帰ってきましたよ
ただ、私はPythonに関してはわかりません
回答1件
あなたの回答
tips
プレビュー