こんにちは、あきぞらです。
最近、新型コロナウイルス関連のニュースを日々見ていて、
エンジニアとして何か技術を使ってできることは無いかと考えていました。
そこで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`等に書き出してしまった方がよいですね。
改善点は色々あるので、また修正していきたいと思います。
では、また。