nesosuke / libpy

Pythonを、つくってあそぶ、最上川
7 stars 0 forks source link

複数階層になってるresponseの処理の仕方がわからん #1

Open nesosuke opened 4 years ago

nesosuke commented 4 years ago

https://github.com/nesosuke/libpy/blob/792237b813b7bb603f30493ec45dd1656463e18a/google_books_api.py をやると、

[{'kind': 'books#volume', 'id': 'YVTijgEACAAJ', 'etag': 'kzQkEaWQ/RA', 'selfLink': 'https://www.googleapis.com/books/v1/volumes/YVTijgEACAAJ', 'volumeInfo': {'title': '入門Python3', 'authors': ['ビ
ルルバノビック'], 'publishedDate': '2015-12-01', 'description': 'Pythonが誕生して四半世紀。データサイエンスやウェブ開発、セキュリティなどさまざまな分野でPythonの人気が急上昇中です。プログラミング教
育の現場でもCに代わってPythonの採用が増えてきています。本書は、プログラミングが初めてという人を対象に書かれた、Pythonの入門書です。前提とする知識は特にありません。プログラミングおよびPythonの基礎か
らウェブ、データベース、ネットワーク、並行処理といった応用まで、Pythonプログラミングをわかりやすく丁寧に説明します。', 'industryIdentifiers': [{'type': 'ISBN_10', 'identifier': '4873117380'}, {'type': 'ISBN_13', 'identifier': '9784873117386'}], 'readingModes': {'text': False, 'image': False}, 'pageCount': 567, 'printType': 'BOOK', 

(以下略)

のようなものが返ってくるが、先頭の [ がよくわかんなくて、辞書にできてなくて???になっている。 最終的には'title': '入門Python3'を取り出したい。

Teara-exe commented 4 years ago

from @teara_exe

のようなものが返ってくるが、先頭の [ がよくわかんなくて、辞書にできてなくて???になっている。

jsonはpythonでいうlistdictionaryが入り混じったデータ構造が存在する^1ため、json.loads(str)した結果は必ずdictionaryになるとは限りません。

今回の先頭の[listを意味します。 恐らくresponse.json()['items']内はdictionarylistになってると思われます。

最終的には'title': '入門Python3'を取り出したい。

response.json()['items']listで、順序が固定されているかどうかはわからないが、一番最初に「入門Python3」の本データが出るとすると、response.json()['items'][0]['volumeInfo']['title']で取得可能です。

Teara-exe commented 4 years ago

余談ですが、jsonの出力を見る際はprint()を使うよりpprint.pprint()を用いたほうが見やすいので、使ってみてください。

# coding: utf-8
#Google BooksでAPIを叩く
import requests

import pprint
ISBN = 9784873117386
res = requests.get(
    'https://www.googleapis.com/books/v1/volumes',
    params={
        "q": "isbn={}".format(ISBN)
    })
pprint.pprint(res.json()['items'])
// output
[{'accessInfo': {'accessViewStatus': 'NONE',
                 'country': 'JP',
                 'embeddable': False,
                 'epub': {'isAvailable': False},
                 'pdf': {'isAvailable': False},
                 'publicDomain': False,
                 'quoteSharingAllowed': False,
                 'textToSpeechPermission': 'ALLOWED',
                 'viewability': 'NO_PAGES',
                 'webReaderLink': 'http://play.google.com/books/reader?id=YVTijgEACAAJ&hl=&printsec=frontcover&source=gbs_api'},
  'etag': 'kzQkEaWQ/RA',
  'id': 'YVTijgEACAAJ',
  'kind': 'books#volume',
  'saleInfo': {'country': 'JP',
               'isEbook': False,
               'saleability': 'NOT_FOR_SALE'},
  'searchInfo': {'textSnippet': 'Pythonが誕生して四半世紀。データサイエンスやウェブ開発、セキュリティなどさまざまな分野でPythonの人気が急上昇中です。プログラミング教育の現場でもCに代わってPythonの採 '
                                '...'},
  'selfLink': 'https://www.googleapis.com/books/v1/volumes/YVTijgEACAAJ',
  'volumeInfo': {'allowAnonLogging': False,
                 'authors': ['ビルルバノビック'],
                 'canonicalVolumeLink': 'https://books.google.com/books/about/%E5%85%A5%E9%96%80Python3.html?hl=&id=YVTijgEACAAJ',
                 'contentVersion': 'preview-1.0.0',
                 'description': 'Pythonが誕生して四半世紀。データサイエンスやウェブ開発、セキュリティなどさまざまな分野でPythonの人気が急上昇中です。プログラミング教育の現場でもCに代わってPythonの採用が増えてきています。本書は、プログラミングが初めてという人を対象に書かれた、Pythonの入門書です。前提とする知識は特にありません。プログラミングおよびPythonの基礎からウェブ、データベース、ネットワーク、並行処理といった応用まで、Pythonプログラミングをわかりやすく丁寧に説明します。',
                 'imageLinks': {'smallThumbnail': 'http://books.google.com/books/content?id=YVTijgEACAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api',
                                'thumbnail': 'http://books.google.com/books/content?id=YVTijgEACAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api'},
                 'industryIdentifiers': [{'identifier': '4873117380',
                                          'type': 'ISBN_10'},
                                         {'identifier': '9784873117386',
                                          'type': 'ISBN_13'}],
                 'infoLink': 'http://books.google.co.jp/books?id=YVTijgEACAAJ&dq=isbn%3D9784873117386&hl=&source=gbs_api',
                 'language': 'ja',
                 'maturityRating': 'NOT_MATURE',
                 'pageCount': 567,
                 'previewLink': 'http://books.google.co.jp/books?id=YVTijgEACAAJ&dq=isbn%3D9784873117386&hl=&cd=1&source=gbs_api',
                 'printType': 'BOOK',
                 'publishedDate': '2015-12-01',
                 'readingModes': {'image': False, 'text': False},
                 'title': '入門Python3'}},
.....
]