[Python] Créez un script qui utilise FeedParser et LINE Notify pour informer LINE des dernières informations sur le nouveau virus corona du ministère de la Santé, du Travail et des Affaires sociales.

Déclencheur

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.

Préparation préalable

Installer la bibliothèque

Installez les bibliothèques requises avec pip.

$ pip install feedparser requests

Obtenez des jetons de notification LINE

À 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

Accédez à RSS et obtenez la dernière URL

É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

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')

Notification LINE lorsqu'il y a 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)

Faites-leur vérifier régulièrement

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 chaque processus

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)

Achevée! ✨ (style Kimagure Cook)

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. LINE.PNG

Amélioration

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

[Python] Créez un script qui utilise FeedParser et LINE Notify pour informer LINE des dernières informations sur le nouveau virus corona du ministère de la Santé, du Travail et des Affaires sociales.
[Python] Lisez automatiquement les informations par préfecture du nouveau virus corona du PDF du ministère de la Santé, du Travail et du Bien-être social et écrivez-les dans un tableur ou Excel.
Utilisez AWS lambda pour récupérer les actualités et notifier régulièrement LINE des mises à jour [python]
[Python] À propos de la création d'un outil pour créer un nouveau courrier Outlook basé sur les données du fichier JSON et de la partie qui a été interceptée
Data Langling PDF sur l'épidémie de grippe par le ministère de la Santé, du Travail et du Bien-être social
Nettoyage des données des données ouvertes de la situation d'occurrence du ministère de la Santé, du Travail et des Affaires sociales
Créez un bot qui publie sur Slack le nombre de personnes positives pour le nouveau virus corona à Tokyo
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
Un script qui facilite la création de menus riches avec l'API de messagerie LINE
Scraping PDF de la liste nationale des salaires minimums par région du ministère de la Santé, du Travail et du Bien-être social
Script Python qui peut vérifier l'état du serveur à partir du navigateur
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées
Script Python qui compare le contenu de deux répertoires
J'ai essayé de créer un script qui retrace les tweets d'un utilisateur spécifique sur Twitter et enregistre l'image publiée à la fois
[Python] J'ai essayé de créer un programme simple qui fonctionne sur la ligne de commande en utilisant argparse
[Python] Laissez LINE vous informer quotidiennement du classement des résultats de recherche sur votre site.
[Python] Notification LINE des dernières informations à l'aide de la recherche automatique Twitter
Un script qui renvoie 0, 1 attaché au premier Python prime
Un script python qui supprime les fichiers ._DS_Store et ._ * créés sur Mac
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
[Python] Un programme qui fait pivoter le contenu de la liste vers la gauche
[Python / Jupyter] Traduisez le commentaire du programme copié dans le presse-papiers et insérez-le dans une nouvelle cellule.
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
[Python] Un programme qui calcule le nombre de chaussettes jumelées
[Python] Créez un linebot pour écrire le nom et l'âge sur l'image
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
Folding @ Home sur Linux Mint pour contribuer à l'analyse du nouveau virus corona
[Python] J'ai créé un script qui coupe et colle automatiquement les fichiers du PC local sur un SSD externe.
GAE --Avec Python, faites pivoter l'image en fonction des informations de rotation d'EXIF et importez-la dans Cloud Storage.
Différentes façons de lire la dernière ligne d'un fichier csv en Python
J'ai créé un Line Bot qui utilise Python pour récupérer les e-mails non lus de Gmail!
Script Python qui lit les fichiers SQL, exécute BigQuery et enregistre le csv
Créez un BOT qui affiche le nombre de personnes infectées dans le nouveau Corona
Créez un environnement python pour apprendre la théorie et la mise en œuvre de l'apprentissage profond
Je souhaite créer une application WEB en utilisant les données de League of Legends ①
[Python] Un programme qui calcule la différence entre les valeurs totales diagonales
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python