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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

YouTube

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

YouTube API

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

3027閲覧

Youtube統計情報の取得list index out of rangeを無視したい

Tweet_from_JG

総合スコア14

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

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

YouTube

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

YouTube API

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2017/05/20 18:54

いつもお世話になっております。

実現したいこと
以下のコードのlist index out of rangeを強制的に無視してrangeを幅広く出力したい。(apiの限界の限り)

問題のコードは以下

python

1import requests 2import json 3DEVELOPER_KEY = "myapikey" 4YOUTUBE_API_SERVICE_NAME = "youtube" 5YOUTUBE_API_VERSION = "v3" 6r = requests.get("https://www.googleapis.com/youtube/v3/search?part=snippet&q=plastic tree&key=myapikey") 7data = json.loads(r.text) 8for j in range(0,5): 9 print ("\nNew Video stats\n") 10 s='' 11 for i in data['items'][j]['id']['videoId']: 12 s+=i 13 print (data['items'][j]['snippet']['title']) 14 ur="https://www.googleapis.com/youtube/v3/videos?part=statistics&id="+s+"&key=myapikey" 15 stat = requests.get(ur) 16 17 data_stat = json.loads(stat.text) 18 for s in data_stat['items'][0]['statistics']: 19 print (str(s)+':'+str(data_stat['items'][0]['statistics'][s]))

以上のコードでYoutubeの動画のキーワードからの検索結果における統計情報を出力しようとしているのですが、for j in range(0,5):からfor j in range(0,6):に変更するとlist index out of rangeとなります。ここを無視して出力をし続けれるようにしたいのですが具体的にコードのどこをいじれば良いか御指南いただけますと幸いです。lenなどの調整なのかと思いつつ・・・
何卒よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

for j in range(0,5):からfor j in range(0,6):に変更するとlist index out of rangeとなります。

原因はYoutube Data API(V3)のsearchから引用

maxResults unsigned integer

maxResults パラメータには、結果セットとして返されるアイテムの最大数を指定します。0 以上 50 以下の値を指定できます。デフォルト値は 5 です。

デフォルトは5件しかAPI結果を返さないためです。よって6件目にアクセスしようとするとlist index out of rangeの例外エラーが発生します。

↓はmaxResultsに50を設定したコードです。

Python

1# -*- coding: utf-8 -*- 2import requests 3import json 4 5 6def main(): 7 DEVELOPER_KEY = 'myapikey' 8 YOUTUBE_API_SERVICE_NAME = "youtube" 9 YOUTUBE_API_VERSION = "v3" 10 #maxResults で結果セットに最大返される件数を設定 11 search_payload = {'key': DEVELOPER_KEY, 'part':'snippet', 'q':'plastic tree', 'maxResults': 50} 12 r = requests.get("https://www.googleapis.com/youtube/v3/search", params=search_payload) 13 data = json.loads(r.text) 14 for j in data['items']: 15 try: 16 print("\nNew Video stats\n") 17 print(j['snippet']['title']) 18 # videosのクエリ文字列を設定 19 videos_payload = {'key': DEVELOPER_KEY, 'part': 'statistics', 'id': j['id']['videoId']} 20 stat = requests.get("https://www.googleapis.com/youtube/v3/videos", params=videos_payload) 21 data_stat = json.loads(stat.text) 22 for s in data_stat['items'][0]['statistics']: 23 print(str(s) + ':' + str(data_stat['items'][0]['statistics'][s])) 24 except Exception as ex: 25 # videoIdが取得できなかった時。 26 print(ex) 27 28if __name__ == '__main__': 29 main()

投稿2017/05/20 21:08

編集2017/05/20 21:21
umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問