東北大学の放射線モニタリング情報を取得する
福島の原発事故を受けて、東北大学が以下のurlで放射線のモニタリング情報を公開しています。
http://www.bureau.tohoku.ac.jp/anzen/monitoring/
ここから情報を取ってくるスクリプトを書きました。/jsonとかでデータにアクセスできるといいんだけどな。
# coding: utf-8 import urllib import decimal import re import time from BeautifulSoup import BeautifulSoup as BS class SievertPerHour(object): def __init__(self, sv): if isinstance(sv, decimal.Decimal): self.sv = sv else: self.sv = decimal.Decimal(str(sv)) def asMicro(self): return self.sv * 10**6 def asMilli(self): return self.sv * 10**3 def __repr__(self): return '<%s Sv/h>' % self.sv class LatLng(object): __slots__ = ['lati', 'long'] def __init__(self, lati, long): self.lati = lati self.long = long class Info(object): def __init__(self, svh, note, timeat, latlng, additional=None): self.svh = svh self.note = note self.latlng = latlng self.timeat = timeat self.additional = additional @classmethod def listFromTohokuUniv(cls): ENCODING = 'utf-8' URL = 'http://www.bureau.tohoku.ac.jp/anzen/monitoring/' PLACE = LatLng(38.26066, 140.841873) # http://bit.ly/gbOAog # fetch html document from web html = urllib.urlopen(URL).read() unihtml = html.decode(ENCODING) # and drop it into soup soup = BS(unihtml) lst = soup.findAll('h5') infolist = [] for n in lst: detail = n.nextSibling.nextSibling s,u = unicode(detail.next.next.next.next).split() m = {u'マイクロシーベルト/時間': 10**6, u'ミリシーベルト/時間': 10**3, u'シーベルト/時間': 1} sph = SievertPerHour(float(s) / m[u]) note = unicode(detail.next.next.next.next.next.next.next.next.next) lst = map(int, re.findall('\d+', n.contents[0])) timeat = '%02d-%02d %02d:%02d' % (lst[0], lst[1], lst[-2], lst[-1]) additional = None infolist.append(Info(sph, note, timeat, PLACE, additional)) return infolist def main(): lst = Info.listFromTohokuUniv() for n in lst: print '%s uSv/h on %s, <<%s>>' % (n.svh.asMicro(), n.timeat, n.note) if __name__ == '__main__': main()
実行結果
$ python radiation.py 0.1000000 uSv/h on 04-04 16:00, <<人体に影響はない>> 0.1000000 uSv/h on 04-04 10:00, <<人体に影響はない>> 0.1000000 uSv/h on 04-03 12:00, <<人体に影響はない>> 0.1000000 uSv/h on 04-02 12:00, <<人体に影響はない>> 0.11000000 uSv/h on 04-01 16:00, <<人体に影響はない>> 0.1000000 uSv/h on 04-01 10:00, <<人体に影響はない>> 0.1000000 uSv/h on 03-31 16:00, <<人体に影響はない>> 0.1000000 uSv/h on 03-31 10:00, <<人体に影響はない>> 0.11000000 uSv/h on 03-30 16:00, <<人体に影響はない>> 0.11000000 uSv/h on 03-30 10:00, <<人体に影響はない>> 0.11000000 uSv/h on 03-29 16:00, <<人体に影響はない>> 0.11000000 uSv/h on 03-29 10:00, <<人体に影響はない>> 0.12000000 uSv/h on 03-28 16:00, <<人体に影響はない>> 0.12000000 uSv/h on 03-28 10:00, <<人体に影響はない>> 0.13000000 uSv/h on 03-27 12:00, <<人体に影響はない>> 0.12000000 uSv/h on 03-26 12:00, <<人体に影響はない>> 0.13000000 uSv/h on 03-25 16:00, <<人体に影響はない>> 0.13000000 uSv/h on 03-25 10:00, <<人体に影響はない>> 0.16000000 uSv/h on 03-24 16:00, <<人体に影響はない>> 0.12000000 uSv/h on 03-24 10:00, <<人体に影響はない>> 0.13000000 uSv/h on 03-23 16:00, <<人体に影響はない>> 0.13000000 uSv/h on 03-23 10:00, <<人体に影響はない>> 0.15000000 uSv/h on 03-22 16:00, <<人体に影響はない>> 0.15000000 uSv/h on 03-22 10:00, <<人体に影響はない>> 0.16000000 uSv/h on 03-21 12:00, <<人体に影響はない>> 0.15000000 uSv/h on 03-20 12:00, <<人体に影響はない>> 0.13000000 uSv/h on 03-19 12:00, <<人体に影響はない>> 0.17000000 uSv/h on 03-18 16:00, <<人体に影響はない>> 0.15000000 uSv/h on 03-18 10:00, <<人体に影響はない>>