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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Q&A

解決済

1回答

1173閲覧

youtube api で 「channels」の'statistics''subscriberCount' と「search」の'snippet'、'channelTitle' を取得したい

Teviz

総合スコア3

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

0グッド

0クリップ

投稿2022/04/07 01:23

編集2022/04/08 19:46

やりたいこと youtube api で

channels の  'statistics''subscriberCount'

search の 'snippet'、'channelTitle'

を pageToken を使って全部取得したいです

channelsには id='UC0FFHRFAAAAAAA' のようなチャンネルidが含まれておらず、

searchを使って idを取得して、channels の  'statistics''subscriberCount'
を取得したいと考えていました

for文で何個か取得できましたが、うまくforが回ってくれません
コードの2回目のfor文に > 引用テキストpageToken=pageToken が無いからうまくいかないのでしょうか?

#この部分↓
search_response = youtube.channels().list(part='statistics',id=item_1['snippet']['channelId'],maxResults=50).execute()

最後の部分も色々変えてみましたが、うまくいきませんでした

pageToken = response.get("nextPageToken")

詳しい方よろしくお願いします

from googleapiclient.discovery import build API_KEY = キーを入力しています YOUTUBE_API_SERVICE_NAME = 'youtube' YOUTUBE_API_VERSION = 'v3' youtube = build(YOUTUBE_API_SERVICE_NAME,YOUTUBE_API_VERSION,developerKey=API_KEY) pageToken = None while True: response = youtube.search().list(q='キーワードを入力しています',part='snippet',type='channel',maxResults=50, pageToken=pageToken).execute() for item_1 in response['items']:    #この部分に search_response = youtube.channels().list(part='statistics',id=item_1['snippet']['channelId'],maxResults=50).execute() for item_2 in search_response['items']: #↓エラーが出ている部分です print(item_1['snippet']['channelTitle'],item_2['statistics']['subscriberCount']) #この部分も触ってみましたがうまくいきませんでした pageToken = response.get("nextPageToken") if pageToken is None: break

エラー内容です

〜〜この部分に14個取得できています〜〜

Traceback (most recent call last):
File "/Users/〜〜〜.py", line 23, in <module>
print(item_1['snippet']['channelTitle'],item_2['statistics']['subscriberCount'])
KeyError: 'subscriberCount'

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/04/07 02:38 編集

まず最初の段階で「何個か取得できましたが、うまくforが回ってくれません」とのことですが、 「2、3個取得」できた後で止まってしまったということでしょうか。そして止まった時に、エラーメッセージはなにも出ていないのでしょうか。 もし、エラーメッセージが出ているならば、具体的な全部のエラーメッセージを省略せずに、質問文の「ソースコードの挿入」で追記してください。 (読みにくくなるので、エラーメッセージをこのコメントの続きに記載するのではなく、投稿欄の編集ボタンをおして質問文自体に追記してください」
Teviz

2022/04/08 01:17 編集

コメントありがとうございます はい、何個か取得('q=' 部分のキーワードによって個数が変わるようです)できて、止まりエラーメッセージが出ています エラーメッセージを入れました 省略せずに入れたつもりですが間違いあればご指摘お願いいたします よろしくお願いします
guest

回答1

0

ベストアンサー

KeyError: 'subscriberCount' というエラーが出ているということは
エラーが出るチャンネルは、設定等によってAPIでは登録者数が取得できない状態であると考えられます。

したがって、エラーが出ている行を下記のように直したらエラーはなくなると思います。

print(item_1['snippet']['channelTitle'],item_2['statistics'].get('subscriberCount', 0)

こうすることで、subscriberCount キーが見つからなかった場合でも、エラーにならずにゼロが返ります。

投稿2022/04/08 03:02

編集2022/04/08 03:03
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Teviz

2022/04/08 05:46

回答ありがとうございました 取得できない状態もあるんですね!ありがとうございます 早速試してみましたが、 maxResults=1 で「島根県」のキーワードで検索したところ、 結果が重複して返ってきてあるものがありまして、 島根県美郷町 532 島根県 カナール 25 島根県奥出雲町 24 ⇦ここです 島根県奥出雲町 24 ⇦ここです 開星中学高校公式チャンネル 361 これは回避できるのでしょうか? それと リクエスト量が多いらしく、エラーが出てしまい The request cannot be completed because you have exceeded your quota. (割り当て量を超えたため、リクエストを完了できません。) リクエスト量を減らすような構文は書けるのでしょうか? 度々恐縮です 質問をもう一つ立ち上げたいと思います。お手隙でしたら どうぞよろしくお願いいたします
退会済みユーザー

退会済みユーザー

2022/04/08 06:48

確認なのですが、もともとの問題自体は解決されたということでよいでしょうか? ならば、解決したとしてクローズしていただけますか?以上、お願いいたします。
Teviz

2022/04/08 10:45

はい 解決しました ありがとうございました 閉じます
Teviz

2022/04/08 10:46

回答ありがとうございました! 大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問