Q&A
Youtube Data API を用いて、channelIdから登録者数を出したい
Youtube Data Api を用いて、キーワード検索からそれぞれの動画情報を抽出するコードは完成したのですが、
チャンネル登録者数だけ、channel()に格納されているため、取得できない状況です。
質問内容:
-
"試したこと"に記載した方法以外で、"該当のソースコード"に新規コードを追加するだけで、チャンネル登録者数も抽出する方法はございますでしょうか?
-
1の質問で、無い場合、"試したこと"のコードの何が間違っていることが原因で、チャンネル登録者数が取得できていないのでしょうか?
該当のソースコード
Python
1from googleapiclient.discovery import build 2import pandas as pd 3import codecs 4 5def get_video_info(query, maxResults, next): 6 search_request = youtube.search().list( 7 part='id', 8 q=query, 9 type='video', 10 maxResults=maxResults, 11 ) 12 13 i = 0 14 while search_request and i < next: 15 search_response = search_request.execute() 16 video_ids = [item['id']['videoId'] for item in search_response['items']] 17 18 videos_response = youtube.videos().list( 19 part='snippet,statistics', 20 id=','.join(video_ids) 21 ).execute() 22 23 yield videos_response['items'] 24 search_request = youtube.search().list_next(search_request, search_response) 25 i += 1 26 27 return search_request 28 29YOUTUBE_API_KEY = 'xxxxxx' 30youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY) 31query = '意識' 32dict = get_video_info( 33 query, 34 50, 35 3, 36) 37 38# csvファイルに保存する 39extacted_data_file = '意識.csv' 40with codecs.open(extacted_data_file, "w", encoding='cp932', errors='replace') as f: 41 for i, items_per_page in enumerate(dict): 42 if i == 0: 43 column_list = ['id', 'url', 44 'publishedAt','channelTitle', 'channelId', 'title', 45 'viewCount', 'likeCount', 'dislikeCount', 'commentCount', 'subscriberCount'] 46 column_list_str = ','.join(column_list) 47 f.write(column_list_str + '\n') 48 for item in items_per_page: 49 dic_list = [] 50 dic_list.append(item['id']) 51 dic_list.append('http://youtube.com/watch?v=' + item['id']) 52 53 snippet = item['snippet'] 54 for key in ['publishedAt', 'channelTitle','channelId','title']: 55 dic_list.append(snippet[key].replace(',', '_')) 56 57 statistics = item['statistics'] 58 for key in ['viewCount','likeCount','dislikeCount','commentCount']: 59 dic_list.append(statistics[key] if key in statistics else "NA") 60 f.write(','.join(list(map(str, dic_list))) + '\n') 61
試したこと
上記のコードで作成されたcsvファイルを用いて、channelId列からそれぞれの登録者数取得し、それをcsvファイルの最終列に追加しようとしたのですが、以下のコードではうまくチャンネル登録者数を取得できませんでした。
Python
1import pandas as pd 2from googleapiclient.discovery import build 3 4YOUTUBE_API_KEY = 'xxxxxxx' 5 6csv = pd.read_csv('./Desktop/意識.csv',encoding="cp932") 7 8def youtube_channel_detail(channel_id, api_key): 9 api_service_name = 'youtube' 10 api_version = 'v3' 11 youtube = build(api_service_name, api_version, developerKey=api_key) 12 search_response = youtube.channels().list( 13 part='snippet,statistics', 14 id=channel_id, 15 ).execute() 16 17 return search_response['items'][0] 18 19 20 21for idx, row in csv.iterrows(): 22 23 24 def main(): 25 26 d = youtube_channel_detail(csv.row['channelId'], YOUTUBE_API_KEY) 27 csv.iloc[idx, 10] = d['statistics']['subscriberCount'] 28 csv.to_csv(/Users/junji/Desktop/生き方.csv)
補足情報(FW/ツールのバージョンなど)
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2021/03/02 07:19