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

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

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

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

API

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

Q&A

解決済

1回答

938閲覧

楽天の書籍検索APIを使って漫画のタイトルを表示させたいです。

Senni

総合スコア12

Python

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

API

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

0グッド

1クリップ

投稿2018/12/31 02:34

編集2018/12/31 11:34

前提・実現したいこと

楽天の書籍検索APIを使って漫画のタイトルを表示させたいです。
iPadアプリのPythonistaを使用しています。

発生している問題・エラーメッセージ

KeyError “title” #titleを消しても出るエラーメッセージ KeyError “salesDate”

該当のソースコード

#ライブラリをインポート import requests import json #アプリID指定 appID = "**************" #表示したい漫画の一覧 subjects = ["キングダム", "はじめアルゴリズム",] #APIの雛型 api = "https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?format=json&keyword={subject}&applicationId={APIkey}" #各漫画のタイトルを取得する for name in subjects: #APIのURLを取得する url = api.format(subject=name, APIkey=appID) #実際にAPIにリクエストを送信して結果を取得する r = requests.get(url) #結果はJSON形式なのでデコードする data = json.loads(r.text) #結果を表示 print("題名", data["title"]) print("発売日", data["salesDate"])

#追記しました。
data = json.loads(r.text)
の後に
print(data)
を入力すると以下のようにデータがずらっと出てきます。

{'count': 971899, 'page': 1, 'first': 1, 'last': 30, 'hits': 30, 'carrier': 0, 'pageCount': 100, 'Items': [{'Item': {'title': 'イッテQ!カレンダー壁掛けタイプ(2019)', 'titleKana': 'イッテ キュー カレンダー カベカケ タイプ', 'subTitle': '', 'subTitleKana': '', 'seriesName': '[カレンダー]', 'seriesNameKana': 'カレンダー', 'contents': '', 'author': '', 'authorKana': '', 'publisherName': '日販アイ・ピー・エス', 'size': 'ムックその他', 'isbn': '9784990991432', 'itemCaption': '', 'salesDate': '2018年12月21日', 'itemPrice': 1944, 'listPrice': 0, 'discountRate': 0, 'discountPrice': 0, 'itemUrl': 'https://books.rakuten.co.jp/rb/15728131/', 'affiliateUrl': '', 'smallImageUrl': 'https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1432/9784990991432.jpg?_ex=64x64', 'mediumImageUrl': 'https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1432/9784990991432.jpg?_ex=120x120', 'largeImageUrl': 'https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1432/9784990991432.jpg?_ex=200x200', 'chirayomiUrl': '', 'availability': '1', 'postageFlag': 1, 'limitedFlag': 0, 'reviewCount': 14, 'reviewAverage': '4.93', 'booksGenreId': '001026001001'}}, {'Item': {'title': '「日本国紀」の副読本', 'titleKana': 'ニホンコクキ ノ フクドクホン', 'subTitle': '学校が教えない日本史', 'subTitleKana': 'ガッコウ ガ オシエナイ ニホンシ', 'seriesName': '産経セレクト', 'seriesNameKana': 'サンケイ セレクト', 'contents': '', 'author': '百田尚樹/有本香', 'authorKana': 'ヒャクタ,ナオキ/アリモト,カオリ', 'publisherName': '産經新聞出版', 'size': '単行本', 'isbn': '9784819113557', 'itemCaption': '', 'salesDate': '2018年12月26日', 'itemPrice': 950, 'listPrice': 0, 'discountRate': 0, 'discountPrice': 0, 'itemUrl': 'https://books.rakuten.co.jp/rb/15736764/', 'affiliateUrl': '', 'smallImageUrl': 'https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3557/9784819113557.jpg?_ex=64x64', 'mediumImageUrl': 'https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3557/9784819113557.jpg?_ex=120x120', 'largeImageUrl': 'https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/3557/9784819113557.jpg?_ex=200x200', 'chirayomiUrl': '', 'availability': '1', 'postageFlag': 0, 'limitedFlag': 0, 'reviewCount': 3, 'reviewAverage': '5.0',

恐れ入りますがよろしくお願いいたします。

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

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

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

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

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

can110

2018/12/31 02:53

print(data)の出力結果を提示すると回答得られやすくなります。
Senni

2018/12/31 10:40

アドバイスありがとうございます! プログラミング初心者で何もわかっていませんので教えていただけると幸いなのですが、出力結果というのはAPIから返ってきたものということでしょうか?
can110

2018/12/31 10:42

はい。「data = json.loads(r.text)」の次の行に「print(data)」を入れて出力される結果です。
Senni

2018/12/31 11:37

ありがとうございます。 print(data)出力結果を追記しました。 うまく検索できていないようです。
guest

回答1

0

ベストアンサー

先頭のtitledata['Items'][0]['Item']['title']で取得できます。salesDateも同様です。
複数分をprintしたい場合はループで処理しましょう。

投稿2018/12/31 11:51

can110

総合スコア38266

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

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

Senni

2018/12/31 12:12

ご回答ありがとうございます。 修正しましたが、下記のように表記されてしまいました。 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 題名: イッテQ!カレンダー壁掛けタイプ(2019) 発売日: 2018年12月21日 #ライブラリをインポート import requests import json #アプリID指定 appID = "********************" #表示したい漫画の一覧 subjects = ["さよなら私のクラマー", "はじめアルゴリズム",] #APIの雛型 api = "https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404?format=json&keyword={subject}&applicationId={APIkey}" #各漫画のタイトルを取得する for name in subjects: #APIのURLを取得する url = api.format(subject=name, APIkey=appID) #実際にAPIにリクエストを送信して結果を取得する r = requests.get(url) #結果はJSON形式なのでデコードする data = json.loads(r.text) #結果を表示 for i in data: i = (data['Items'][0]['Item']['title']) i2 = (data['Items'][0]['Item']['salesDate']) print("題名:", i) print("発売日:", i2)
can110

2018/12/31 12:39

for文の使い方がおかしいですね。 data['Items'] がitemの入っているリストになりますので for item in data['Items']:  item['item']~ のようにすべきです。
Senni

2019/01/02 03:21

度々申し訳ありません。 修正しましたが直りませんでした。 #結果を表示 for item in data['Items']: title = (data['Items'][0]['Item']['title']) print(title) 以下のように出力されてしまいました。 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 「日本国紀」の副読本 度々申し訳ありません。 ご教示いただけませんでしょうか。
退会済みユーザー

退会済みユーザー

2019/01/02 03:40

質問者ループの意味勉強し直そうか title = (data['Items'][0]['Item']['title'])
Senni

2019/01/02 03:54

すみません。 出直します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問