簡単にjson取得できますよ〜
最近fabricを使い出した影響で、pythonのコードを少しづつ書くようになりました。
【python】fabricを触ってみた!【デプロイツール】 - 文系プログラマによるTIPSブログ
【デプロイ】Fabricを学ぶ:Vol.01:基本的な使い方を学ぶ【python】 - 文系プログラマによるTIPSブログ
【デプロイ】Fabricを学ぶ:Vol.02:tomcatの起動完了を監視する【python】 - 文系プログラマによるTIPSブログ
そこで今回、httpリクエストで取得したjsonをpythonで解析してみたいと思います。
レスポンスjson
APIのサンプルレスポンスに書いてあるものを一部抜粋しました。↓↓↓
{ "publicTime" : "2013-01-29T11:00:00+0900", "title" : "福岡県 久留米 の天気", "description" : { "text" : " 九州北部地方は、高気圧に覆われて晴れています。\n\n 29日は、九州北部地方では、高気圧に覆われて晴れますが、気圧の谷の\n影響で、昼過ぎから次第に曇りとなるでしょう。\n\n 30日は、気圧の谷の影響ではじめ曇りますが、昼頃からは高気圧に覆わ\nれて概ね晴れるでしょう。\n\n 波の高さは、九州北部地方の沿岸の海域では、29日は1.5メートル、\n30日は1メートルでしょう。豊後水道では、29日と30日は1メートル\nでしょう。\n 福岡県の内海では、29日と30日は0.5メートルでしょう。", "publicTime" : "2013-01-29T10:37:00+0900" }, "link" : "http://weather.livedoor.com/area/forecast/400040", "forecasts" : [ { "dateLabel" : "今日", "telop" : "晴のち曇", "date" : "2013-01-29", "temperature" : { "min" : null, "max" : { "celsius" : "11", "fahrenheit" : "51.8" } }, "image" : { "width" : 50, "url" : "http://weather.livedoor.com/img/icon/5.gif", "title" : "晴のち曇", "height" : 31 } }, { "dateLabel" : "明日", "telop" : "晴れ", "date" : "2013-01-30", "temperature" : { "min" : { "celsius" : "3", "fahrenheit" : "37.4" }, "max" : { "celsius" : "13", "fahrenheit" : "55.4" } }, "image" : { "width" : 50, "url" : "http://weather.livedoor.com/img/icon/1.gif", "title" : "晴れ", "height" : 31 } } } }
pythonでjsonをパースする
サンプルソース
#coding:utf-8 import json, urllib2 url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=400040' try: r = urllib2.urlopen(url) root = json.loads(r.read()) print 'title=' + root['title'] description = root['description'] print 'publicTime=' + description['publicTime'] forecasts = root['forecasts'] for forecast in forecasts: print ' dateLabel=' + forecast['dateLabel'] + ',telop=' + forecast['telop'] + ',date=' + forecast['date'] finally: r.close()
実行結果
treemacpro-2:~ tree$ python ./jsonTest.py title=福岡県 久留米 の天気 publicTime=2014-05-28T21:37:00+0900 dateLabel=今日,telop=晴れ,date=2014-05-29 dateLabel=明日,telop=晴時々曇,date=2014-05-30
よくあるミス
[] の部分は配列なので、forでループします。
ハッシュ部分は key['value'] で値を取得できます。
例えば
TypeError: string indices must be integers
こんなエラーがでる場合は、配列をハッシュで取得しようとしてよく起きます。
私はru◯yが嫌いなのであります!!
ファッキンru◯y!!
好き嫌いで言語使い分けるのやめろ