Help us understand the problem. What is going on with this article?

気象警報通知を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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした