DiaryException このページをアンテナに追加 RSSフィード Twitter

2006-02-10(金) 暖かい様な。油断禁物。

[][]Python天気予報

via.404 Not Found

というわけで、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)

楽しくなってきた。

トラックバック - http://d.hatena.ne.jp/LaclefYoshi/20060210/1139583501
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |