読者です 読者をやめる 読者になる 読者になる

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

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のコードを記事に貼れることに気づいたけどよしとする。