No Programming, No Life

プログラミング関連の話題や雑記

livedoorのお天気APIをGroovyで使ってみた

livedoorがお天気APIを公開していたので、Groovyから使ってみた。
APIの詳細はここを参照。
以下のGroovyスクリプトを実行すると、名古屋の今日、明日、あさっての天気がお手軽に取得できます。
2009-01-25現在、なぜか温度は取れなかったので、今後対応するのかな?


(動作確認: Groovy Version: 1.5.7 JVM: 1.6.0_10)

// Thanks to http://weather.livedoor.com/weather_hacks/webservice.html
// cityの確認は→ http://weather.livedoor.com/weather_hacks/rss_feed_list.html

API_DATE_FORMAT = new java.text.SimpleDateFormat('EEE, d MMM yyyy HH:mm:ss Z', Locale.US)
OUT_DATE_FORMAT = new java.text.SimpleDateFormat('yyyy-MM-dd(E)')

def base = 'http://weather.livedoor.com/forecast/webservice/rest/v1'
def city = '38' // 名古屋
def days = ['today', 'tomorrow', 'dayaftertomorrow'] // 今日, 明日, あさって
days.each{ day ->
   def param = "city=${city}&day=${day}"
   def url = "${base}?${param}"
   def result = new XmlParser().parse(url)
   output(result)
// outputWithDescription(result)
}

/** 出力 */
def output(result){
   def date = OUT_DATE_FORMAT.format(API_DATE_FORMAT.parse(result.forecastdate.first().text()))
   println "●${date} ${result.title.text()} [${result.telop.text()}]"
}
/** 出力(詳細付き) */
def outputWithDescription(result){
   println """\
●${result.title.text()} [${result.telop.text()}]
${result.description.text()}
"""
}

出力結果


●2009-01-25(日) 愛知県 名古屋 - 今日の天気 [晴れ]
●2009-01-26(月) 愛知県 名古屋 - 明日の天気 [晴れ]
●2009-01-27(火) 愛知県 名古屋 - あさっての天気 [晴時々曇]