プログラミング

【Python】FeedParserとLINE Notifyを利用して厚生労働省の新型コロナウイルスに関する最新情報を通知するスクリプトを作る

こんにちは、あきぞらです。

最近、新型コロナウイルス関連のニュースを日々見ていて、エンジニアとして何か技術を使ってできることは無いかと考えていました。

そこで、最近学び始めたPythonを使って、厚生労働省の最新情報のURLをLINE通知するスクリプトを組んでみました。

環境は以下です。

  • Windows10
  • Python 3.8

新型コロナウイルスに関する最新情報を通知するスクリプト

ソースは以下です。1分ごとに厚生労働省のRSSにアクセスして最新情報を確認するようにしています。

必要なライブラリをインストールすればローカルで動かせると思います。

import requests
import feedparser
from time import sleep
import os

# RSSへアクセスし最新のURLを取得する
def getRssFeedData():
    # アクセスするrdfのURLを記載
    RSS_URL = 'https://www.mhlw.go.jp/stf/news.rdf'
    xml = feedparser.parse(RSS_URL)
    for entry in xml.entries:
        # linkの中からnewpageの最初のURLを取り出す
        if('newpage' in entry.link):
            print(entry.link)
            return entry.link

# LINEへ通知を行うメソッド
def lineNotify(url):
    # 発行したトークンを記載します
    LINE_NOTIFY_TOKEN = '1234567890abcdefghijklmnopqrstuvwxyz'

    # LINE NotyfyのAPI URLを記載します
    LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify'

    message = '\n厚生労働省からの最新情報があります。\n' + url
    payload = {'message': message}
    headers = {'Authorization': 'Bearer ' + LINE_NOTIFY_TOKEN }

    # LINE通知を行う
    requests.post(LINE_NOTIFY_API, data=payload, headers=headers)

# URLが更新されたかチェック
def checkLatestNews():
    rss_url = getRssFeedData()
    path = './latest_url.txt'

    # latest_url.txtがなければ新規作成
    if not os.path.isfile(path):
        string = 'new file'
        with open(path, mode='w') as file:
            file.write(string)

    local_url = ''
    with open(path, mode='r') as file:
        local_url = file.read()

    # 新着情報があるかチェック
    if (local_url == rss_url):
        print('新着情報はありませんでした')
    else:
        lineNotify(rss_url)
        with open(path, mode='w') as file:
            string = rss_url
            file.write(string)
        print('新着情報があったので通知しました')
    
while True:
    checkLatestNews()
    # 1分ごとにチェック※適宜変更
    sleep(60)

事前準備

ライブラリのインストール

解説をする前に、必要なライブラリをpipでインストールします。

$ pip install requests
$ pip install feedparser

LINE Notifyのトークンを取得する

まず、LINE Notifyのトークンを取得しましょう。

トークンの取得方法はこちらの記事でも記載しています。

`LINE_NOTIFY_TOKEN `に取得したトークンを記載します。

実装時のポイント

実装時のポイントは以下を考えました。

ほぼ即興で組んだスクリプトのため、もっと良いやり方がありそうですが、追々改善していければいいと思っています。

実装時のポイントは以下です。

  • 取得したURLのうちnewpage の文言を含むURLが新着情報のため、一番最初に合致したURLを返す
  • 取得した最新のURLは`latest_url.txt`に書き込んでおく
  • 次回実行時にlatest_url.txtに書いてあるURLと違ったら、新しい新着情報があったとしてLINEに通知を行う

改善点とまとめ

今回はローカルの開発環境で動かしてましたが、aws のLambdaに上げて自動実行させるようにしたいと思います。

あとは、トークン情報などの環境変数は`.env`等に書き出してしまった方がよいですね。

改善点は色々あるので、また修正していきたいと思います。

では、また。

-プログラミング

Copyright© あきぞらてっく , 2020 All Rights Reserved Powered by AFFINGER5.