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

【Python × Zapier】警報情報を取得してSlackで通知する

やりたいこと(BEFORE)

気象庁の警報情報を取得して指定する地域に警報が出ていればSlackで通知する

こちらの記事がやりたいことドンピシャだ!
と思い記事の通りに進めていましたが、気象庁のデータが更新される度にZapier(作業を自動化できるツール)のタスクを動かしていると自分のプランの上限タスクを超えてしまう...

screencapture-zapier-app-billing-plans-2020-02-09-17_41_58.png

そこでやりたいことの範囲を狭めました。

やりたいこと(AFTER)

気象庁の警報情報を「毎朝7時」に取得して指定する地域に警報が出ていればSlackで通知する

▼こんな感じ(動かした時に警報が出ていなかったので代わりに注意報を取得した様子)

毎朝7時に1回だけ情報を取得してタスク実行回数を1回/日にしました。

Zap全体図

  1. Every Day:ここで毎朝7時にタスクを実行するように設定
  2. Run Python:気象庁の情報を取得・抽出(下にコードを記載)
  3. Only continue if...:2で出力があれば(警報が出ていれば)次に進む
  4. Send Channel Message in Slack:Slackの指定するチャンネルで通知

Pythonコード

やりたいことが若干変わったので勉強せねば...と思いスクレイピングの方法を調べて書きました。初Python!
調べているとどうやらBeautifulSoupというものを使うのか〜ということを知りましたがZapierのヘルプにこんなことが書いてありました。
スクリーンショット 2020-02-09 18.23.51.png
お"ぉぉおおおんBeautifulSoupが使えない!
ということで無理矢理感ありますがBeautifulSoup使わずにほしい箇所(警報部分)だけ抽出します。

import re
import requests
import time

code_list = [['札幌市', '0110000'], ['仙台市東部', '0410001'], ['さいたま市', '1110000']]
output = {'text': ''}

for code in code_list:
    html = requests.get('https://www.jma.go.jp/jp/warn/f_' + code[1] + '.html').text
    data_list = re.findall('<span style="color:#FF2800">(.*?)</span>', html)

    if len(data_list) == 0:
        continue

    text = '【' + code[0] + '】'
    i = 1
    for data in data_list:
        if i == len(data_list):
            text += data
        else:
            data = re.sub('警報', '', data)
            text  += data + ','
        i += 1
    output['text'] += text + '\n'
    time.sleep(1)

各地域のページで警報部分のフォントカラーは#FF2800なので、<span style="color:#FF2800">〜</span>で囲まれた部分を全て抽出しています。
また、複数ページをスクレイピングするのでtime.sleep(1)で1秒休ませます。

参考

気象庁から情報を取得して東京23区の気象警報をSlackに通知する
Zapierの使い方も含めてとても参考にさせていただきました。

rntkym
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
ユーザーは見つかりませんでした