天気予報取得するPythonスクリプト書いた。

どっから情報とるの?

Weather Hacksという天気情報をJSON形式で配布しているサービスを使った。
コードはブログに載せるにはちょっと長いのでgithubにあげた。→https://github.com/tkmru/weatherhacks

地域情報を取るコード

Weather Hacksを使うにあたり必要な地域情報を取得するコードを載せておく。Weather Hacksは地域別に定義されたID番号別にJSONデータが分けられていて、その地域とIDの対応をxmlファイルで提供されているので、そこから中身を抜き出すスクリプト

# coding: UTF-8

from xml.dom import minidom

xdoc = minidom.parse("primary_area.xml")

f = open("titenteigi.txt", "w")
elements = xdoc.getElementsByTagName("city")[0] #cityタグの1つ目の要素を取得
elements_title = elements.getAttribute("title")
elements_id = elements.getAttribute("id")
word = "u\"" + elements_title + "\"" + ": " + "\"" + elements_id + "\",\n"
f.write("        titenteigi = {" + word.encode("shiftjis"))
f.close

for i in range(1, 141):
    f = open("titenteigi.txt", "r+")
    data = f.read()
    f.tell()
    f.seek(0,0)
    f.tell()
    elements = xdoc.getElementsByTagName("city")[i] #cityタグのi番目の要素を取得
    elements_title = elements.getAttribute("title")
    elements_id = elements.getAttribute("id")
    word = "u\"" + elements_title + "\"" + ": " + "\"" + elements_id + "\",\n"
    f.write(data)
    f.write("                      " + word.encode("shiftjis"))
    f.close

f = open("titenteigi.txt", "r+")
data = f.read()
f.tell()
f.seek(0,0)
f.tell()
f.write(data)
elements = xdoc.getElementsByTagName("city")[141] #cityタグの142個目の要素を取得
elements_title = elements.getAttribute("title")
elements_id = elements.getAttribute("id")
word = "u\"" + elements_title + "\"" + ": " + "\"" + elements_id + "\"}"
f.write("                      " + word.encode("shiftjis"))
f.close

感想

xmlスクレイピングはサクッと出来たけれど、JSONデータの扱いにかなり手間取ってしまった。
サンプルのJSONデータには、明後日までの天気情報あるのに、実際には明日までしかなか(ry...たり、最高気温と最低気温がところどころNoneになって(ry...した.

ここまで書いてgithubのコードを記事に貼れることに気づいたけどよしとする。