Edited at

気象警報通知をWebスクレイピングで。

More than 1 year has passed since last update.


警報をTwitterで教えてほしい。


動機


カッとなってやった

高校生です。

学校が警報で休みになります。

あのレスポンスの悪いNHKデータ放送で逐一警報を確認する信心深い時間がドキドキしすぎるので、ぜひTwitterで自動通知してほしいのです。はい。


問題

なんか、警報APIとか全然ない。

探したらあったけどどうやら「はぶさぶぱぶばぶ」とか言うばぶばぶなプロトコル使ってるようで俺にゃ無理。

...


Webスクレイピングだッ!!

これだぁっ!!


環境


  • Python3

  • urllib

  • BeatifulSoup4

  • twitter(Pythonライブラリ)

てな感じでさ。


ソイソース

# coding: UTF-8

#!/usr/bin/env python3

from urllib import request
from bs4 import BeautifulSoup
from datetime import datetime
import time
import twitter

OK = '33[92m'
WARN = '33[93m'
NG = '33[91m'
END_CODE = '33[0m'

api = twitter.Api(consumer_key='あ、あなたの', consumer_secret='秘密を', access_token_secret='こ、ここに入れるのよ')

# アクセスするURL
url = "https://typhoon.yahoo.co.jp/weather/jp/warn/なんか/番号/"

def Getter(soup):
Summaryarea = soup.findAll("div", class_="warnSummary_box")
# print(Summaryarea[0].dl)
Li = Summaryarea[0].dl.dd.ul.li
# adv = Li.find("span",class_="icoAdvisory")#警報知らせ
adv = Li.find("span", class_="icoWarning") # 注意報知らせ
if adv:
# Yes
# print("OK")
return 1
else:
# No
# print("NO")
return 0

def Twit(state):
nowtime = datetime.now()
NowStr = str(nowtime.hour) + "時" + str(nowtime.minute) + "分現在"
Txt = ""
if state:
Txt = "\nなんとか市に警報が発令されてるみたい。。。\nべっ別に学校休みだからって喜んだりしないんだからねっ!!"
else:
Txt = "\nなんとか市には警報出てないみたいね。\n変な悪あがきはやめてさっさと学校に行くことね。"
status = api.PostUpdate("[気象警報自動通知システム]\n" + NowStr + Txt)
print(status.text)

def Coloring(txt, code):
return "\033[%sm%s\033[0m" % (code, txt)

def main():
while 1:
print("Now " + ntStr)
print("Its time!")

# 読み込み
html = request.urlopen(url).read()

soup = BeautifulSoup(html, "html.parser")
Twit(Getter(soup))
if Getter(soup):
# 警報でてら
print(Coloring("!!!!WARNING!!!!", "31"))
else:
# 警報でとらん
print(Coloring("ALLGREEN", "32"))
time.sleep(60 * 3)

if __name__ == "__main__":
main()

*きったなくてすんません。。。

URLはYahoo天気の警報ページです。


結果

Screenshot_20170723_003600Edited.png

できますた。

いい感じ。


改善点

これをラズパイと連携させて警報出たら家の鍵閉まるようにするwww