Je regardais les informations sur le nouveau virus corona tous les jours et je me demandais si je pouvais faire quelque chose en tant qu'ingénieur en utilisant une technologie. Pour obtenir des informations sur le virus corona, j'avais l'habitude de consulter le site Web du ministère de la Santé, du Travail et du Bien-être social comme information principale. J'ai remarqué qu'il y avait un flux RSS](https://www.mhlw.go.jp/stf/news.rdf) et je me demandais si je pouvais l'utiliser.
Par conséquent, j'ai décidé de créer un script que LINE notifie à l'URL des dernières informations du ministère de la Santé, du Travail et du Bien-être en utilisant Python, que j'ai récemment commencé à apprendre. J'étudie Python, donc j'espère que vous le prendrez pour acquis.
L'environnement est Windows10
, Python3.8
, mais je pense qu'il n'y a pas de problème s'il s'agit de la série Mac ou Python3.
Installez les bibliothèques requises avec pip.
$ pip install feedparser requests
À partir de là, obtenez un jeton pour informer LINE.
Vous pouvez obtenir rapidement des jetons LINE Notify en vous référant ici. [Super facile] Essayez d'utiliser la notification LINE
Écrivez un script pour accéder à RSS et obtenir la dernière URL.
Le tout premier lien contenant la chaîne newpage
semble être la dernière information, alors créez une méthode qui renvoie ceci.
#Accédez à RSS et obtenez la dernière URL
def getRssFeedData():
#Décrivez l'URL du rdf pour y accéder
RSS_URL = 'https://www.mhlw.go.jp/stf/news.rdf'
xml = feedparser.parse(RSS_URL)
for entry in xml.entries:
#Extraire la première URL de la nouvelle page à partir du lien
if('newpage' in entry.link):
print(entry.link)
return entry.link
Déterminez si l'URL récupérée est à jour.
Ici, on suppose que la méthode de ↑ est toujours à jour.
Enregistrez l'URL dans un fichier local (latest_url.txt
), comparez l'URL du fichier local avec l'URL obtenue à partir de RSS, et si elles sont différentes, une notification LINE sera envoyée comme les dernières informations.
#Rechercher de nouvelles informations
def checkLatestNews():
rss_url = getRssFeedData()
path = './latest_url.txt'
# latest_url.S'il n'y a pas de txt, créez-en un nouveau
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()
#Rechercher de nouvelles informations
if (local_url == rss_url):
print('Il n'y avait pas de nouvelles informations')
else:
with open(path, mode='w') as file:
string = rss_url
file.write(string)
print('Il y avait de nouvelles informations')
Enfin, créez un processus pour notifier LINE lorsqu'il y a de nouvelles informations. Recevez l'URL des nouveautés et informez LINE.
#Méthode pour notifier LINE
def lineNotify(url):
#Lister le jeton émis
LINE_NOTIFY_TOKEN = '1234567890abcdefghijklmnopqrstuvwxyz'
#Répertoriez l'URL API de LINE Notify
LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify'
message = '\n Il y a les dernières informations du ministère de la Santé, du Travail et du Bien-être.\n' + url
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + LINE_NOTIFY_TOKEN }
#Faire une notification LINE
requests.post(LINE_NOTIFY_API, data=payload, headers=headers)
Vérifions-le toutes les 5 minutes comme s'il était exécuté localement.
while True:
checkLatestNews()
#Vérifiez toutes les 5 minutes * Changez le cas échéant
sleep(300)
Connectez le traitement jusqu'à présent.
line_notify.py
import requests
import feedparser
from time import sleep
import os
#Accédez à RSS et obtenez la dernière URL
def getRssFeedData():
#Décrivez l'URL du rdf pour y accéder
RSS_URL = 'https://www.mhlw.go.jp/stf/news.rdf'
xml = feedparser.parse(RSS_URL)
for entry in xml.entries:
#Extraire la première URL de la nouvelle page à partir du lien
if('newpage' in entry.link):
print(entry.link)
return entry.link
#Méthode pour notifier LINE
def lineNotify(url):
#Lister le jeton émis
LINE_NOTIFY_TOKEN = '1234567890abcdefghijklmnopqrstuvwxyz'
#Répertoriez l'URL API de LINE Notify
LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify'
message = '\n Il y a les dernières informations du ministère de la Santé, du Travail et du Bien-être.\n' + url
payload = {'message': message}
headers = {'Authorization': 'Bearer ' + LINE_NOTIFY_TOKEN }
#Faire une notification LINE
requests.post(LINE_NOTIFY_API, data=payload, headers=headers)
#Vérifiez si l'URL a été mise à jour
def checkLatestNews():
rss_url = getRssFeedData()
path = './latest_url.txt'
# latest_url.S'il n'y a pas de txt, créez-en un nouveau
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()
#Rechercher de nouvelles informations
if (local_url == rss_url):
print('Il n'y avait pas de nouvelles informations')
else:
#Notification LINE
lineNotify(rss_url)
with open(path, mode='w') as file:
string = rss_url
file.write(string)
print('Je vous ai prévenu car il y avait de nouvelles informations')
while True:
checkLatestNews()
#Vérifiez toutes les 5 minutes * Changez le cas échéant
sleep(300)
Exécutez localement.
$ python line_notify.py
https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Je vous ai prévenu car il y avait de nouvelles informations
https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Il n'y avait pas de nouvelles informations
https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Il n'y avait pas de nouvelles informations
https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Il n'y avait pas de nouvelles informations
・ ・ ・
J'ai reçu une notification.
Je pense qu'il y a encore place à l'amélioration, comme l'élever vers Lambda et déplacer les variables d'environnement vers le fichier env. Je veux passer à Lambda et l'exécuter régulièrement.
Recommended Posts