no-image

【python】【JSON】耐久戦完全敗北

PythonでJSONファイルを扱うにはどうすればいい?

JSONデータはpythonの辞書みたいな形

  • 辞書と違う点は項目をダブルクォートで囲んでいること
  • json.loads() → JSONデータをPythonの辞書に変換する
  • json.dumps()→Pythonの辞書のJSONデータに変換する

JSONで記述できる型

JSONで扱えるPythonの型は下記のとおりです。

  • 文字列
  • 整数
  • 浮動小数点
  • ブール値
  • リスト
  • 辞書
  • None

API(アプリケーションプログラミングインターフェース)ってなに

  • APIはJSON形式などコンピュータが読めるデータを返す。
  • APIの返すデータ構造の内容を知るためには提供者のドキュメントを読む

今後の課題、問題点

JSONの問題点とはきちがえそうになったが、今回おきたのは401エラー(許可していない)ということだった。JSONデータを取り扱う前のwebリクエストのところで問題がおきている。

requests.get()でwebページを取得できる。ができなかった。401エラーは該当ページにログインしていたら、「許可している」ということにはならないようです。これは間違いなく自分の固定観念です。そう簡単にはうまくいきません。

もう少し根気を入れる必要がありそうです。

追記

openweathermapのAPIキーについての401エラーヘルプ

Q:API呼び出しでエラー401が返される
A:2015年10月9日からAPIにアクセスするには、有効なAPPIDが必要です。これはAPIが定期購読のみであることを意味するものではありません。無料のアカウントを登録して鍵を受け取るまでに少し時間をかけてください。

引用元: Frequent Asked Questions – OpenWeatherMap

時間はおいたつもりだがだめ。一日まってだめだったらまた考える必要がある。

さらに追記

解決しました。原因はurlの表記ミスである可能性が高い。ミスというよりも書籍の内容が古い?教訓:書籍を信じない、必ず公式ドキュメントを確認すること。

国の天気は取得するPythonコード

下記のコードは「退屈なことはPythonにやらせよう」という書籍にかかれているコードを改良したものです。国の天気データを取得するには、下記サイトのAPIを使用する必要があります。
Weather API – OpenWeatherMap

import json, requests, pprint
APPID = '-------------'#APIキーの定義
# × → url ='http://api.openweathermap.org/data/2.5/forecast/daily?q={}&cnt=3&appid={}'.format('London', APPID)
url ='http://api.openweathermap.org/data/2.5/weather?q={}&appid={}'.format('London', APPID)
response = requests.get(url)
response.raise_for_status()

weather_data = json.loads(response.text)
print(type(weather_data))
pprint.pprint(weather_data)