Python天気予報

via.http://neta.ywcafe.net/000534.html
というわけで、livedoor 天気情報を利用して、Pythonで天気予報表示スクリプト
問題は、地域コードを全国の地点定義表(XML)で先に知っておかないと使えない。これは対策が幾つか思いつくので好きな方法を選択すれば良い。


実行例

$ python livedoorweather.py
Select City(NUM): 83
Select Day(1:today, 2:tomorrow, 3:dayaftertomorrow): 1

兵庫県 豊岡 - 今日の天気        曇のち雨
(但馬北部の海上では、11日朝のうちにかけて高波に注意して下さい。
また、兵庫県南部では空気が乾燥しているため、火の取り扱いに注意して下さい。兵庫県北部、...)
Temperature  Max: 8     Min: 0

$ python livedoorweather.py
Select City(NUM): 83
Select Day(1:today, 2:tomorrow, 3:dayaftertomorrow): 2

兵庫県 豊岡 - 明日の天気        雪
(但馬北部の海上では、11日朝のうちにかけて高波に注意して下さい。
また、兵庫県南部では空気が乾燥しているため、火の取り扱いに注意して下さい。兵庫県北部、...)
Temperature  Max: None  Min: None

$ python livedoorweather.py
Select City(NUM): 83
Select Day(1:today, 2:tomorrow, 3:dayaftertomorrow): 3

兵庫県 豊岡 - あさっての天気    曇のち晴
(但馬北部の海上では、11日朝のうちにかけて高波に注意して下さい。
また、兵庫県南部では空気が乾燥しているため、火の取り扱いに注意して下さい。兵庫県北部、...)
Temperature  Max: 12    Min: 1

ソースコード

import sys, urllib, xml.dom.minidom
sel_city = int(raw_input('Select City(NUM): '))
sel_day = int(raw_input('Select Day(1:today, 2:tomorrow, 3:dayaftertomorrow): '))
if sel_day == 1:
 sel_day = 'today'
elif sel_day == 2:
 sel_day = 'tomorrow'
elif sel_day == 3:
 sel_day = 'dayaftertomorrow'
params = urllib.urlencode({'city': sel_city, 'day': sel_day})
f = urllib.urlopen("http://weather.livedoor.com/forecast/webservice/rest/v1", params)
wea_xml = xml.dom.minidom.parseString(f.read())
title = wea_xml.getElementsByTagName('title').item(0).firstChild.data
telop = wea_xml.getElementsByTagName('telop').item(0).firstChild.data
desc = wea_xml.getElementsByTagName('description').item(0).firstChild.data
print "\n%s\t%s\n(%s)" % (title, telop, desc)
tempe_elm = wea_xml.getElementsByTagName('temperature').item(0)
max_elm = tempe_elm.getElementsByTagName('max').item(0)
max_tempe = max_elm.getElementsByTagName('celsius').item(0).firstChild
if max_tempe != None:
 max_tempe = max_tempe.data
min_elm = tempe_elm.getElementsByTagName('min').item(0)
min_tempe = min_elm.getElementsByTagName('celsius').item(0).firstChild
if min_tempe != None:
 min_tempe = min_tempe.data
print "Temperature  Max: %s\tMin: %s" % (max_tempe, min_tempe)

楽しくなってきた。