[Python] Erstellen Sie ein Skript, das FeedParser und LINE Notify verwendet, um LINE über die neuesten Informationen zum neuen Koronavirus des Ministeriums für Gesundheit, Arbeit und Soziales zu informieren.

Auslösen

Ich sah mir jeden Tag die Nachrichten über das neue Koronavirus an und fragte mich, ob ich als Ingenieur mit irgendeiner Technologie etwas tun könnte. Für Informationen zum Koronavirus habe ich die Website des Ministeriums für Gesundheit, Arbeit und Soziales als primäre Informationen verwendet. Ich bemerkte, dass es einen RSS-Feed gab](https://www.mhlw.go.jp/stf/news.rdf) und fragte mich, ob ich ihn verwenden könnte.

Aus diesem Grund habe ich mich für Python entschieden, das ich kürzlich gelernt habe, um ein Skript zu erstellen, das LINE über die neueste Informations-URL des Ministeriums für Gesundheit, Arbeit und Soziales informiert. Ich lerne Python, also hoffe ich, dass Sie es für selbstverständlich halten. Die Umgebung ist "Windows10", "Python3.8", aber ich denke, dass es kein Problem gibt, wenn es sich um eine Mac- oder Python3-Serie handelt.

Vorbereitungen

Bibliothek installieren

Installieren Sie die erforderlichen Bibliotheken mit pip.

$ pip install feedparser requests

Holen Sie sich LINE Benachrichtigungstoken

Holen Sie sich von hier aus einen Token, um LINE zu benachrichtigen.

Sie können LINE Notify-Token schnell erhalten, indem Sie hier darauf verweisen. [Super einfach] Versuchen Sie es mit LINE notify

Greifen Sie auf RSS zu und erhalten Sie die neueste URL

Schreiben Sie ein Skript, um auf RSS zuzugreifen und die neueste URL abzurufen. Der allererste Link, der die Zeichenfolge "newpage" enthält, scheint die neueste Information zu sein. Erstellen Sie daher eine Methode, die diese zurückgibt.

#Greifen Sie auf RSS zu und erhalten Sie die neueste URL
def getRssFeedData():
    #Beschreiben Sie die URL von rdf, auf die zugegriffen werden soll
    RSS_URL = 'https://www.mhlw.go.jp/stf/news.rdf'
    xml = feedparser.parse(RSS_URL)
    for entry in xml.entries:
        #Extrahieren Sie die erste URL der neuen Seite aus dem Link
        if('newpage' in entry.link):
            print(entry.link)
            return entry.link

Stellen Sie fest, ob die abgerufene URL aktuell ist

Stellen Sie fest, ob die abgerufene URL aktuell ist. Hierbei wird davon ausgegangen, dass die Methode von ↑ immer aktuell ist. Notieren Sie die URL in einer lokalen Datei (latest_url.txt), vergleichen Sie die URL der lokalen Datei mit der von RSS erhaltenen URL. Wenn sie unterschiedlich sind, wird die LINE-Benachrichtigung als neueste Information gesendet.

#Suchen Sie nach neuen Informationen
def checkLatestNews():
    rss_url = getRssFeedData()
    path = './latest_url.txt'
 
    # latest_url.Wenn kein txt vorhanden ist, erstellen Sie einen neuen
    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()
 
    #Suchen Sie nach neuen Informationen
    if (local_url == rss_url):
        print('Es gab keine neuen Informationen')
    else:
        with open(path, mode='w') as file:
            string = rss_url
            file.write(string)
        print('Es gab neue Informationen')

LINE-Benachrichtigung, wenn neue Informationen vorliegen

Erstellen Sie abschließend einen Prozess, um LINE zu benachrichtigen, wenn neue Informationen vorliegen. Erhalten Sie die URL der Neuheiten und benachrichtigen Sie LINE.

#Methode zur Benachrichtigung von LINE
def lineNotify(url):
    #Listen Sie das ausgegebene Token auf
    LINE_NOTIFY_TOKEN = '1234567890abcdefghijklmnopqrstuvwxyz'
 
    #Listen Sie die API-URL von LINE Notify auf
    LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify'
 
    message = '\n Es gibt die neuesten Informationen des Ministeriums für Gesundheit, Arbeit und Soziales.\n' + url
    payload = {'message': message}
    headers = {'Authorization': 'Bearer ' + LINE_NOTIFY_TOKEN }
 
    #Machen Sie eine LINE-Benachrichtigung
    requests.post(LINE_NOTIFY_API, data=payload, headers=headers)

Lassen Sie sie regelmäßig überprüfen

Lassen Sie es uns alle 5 Minuten überprüfen, als ob es lokal ausgeführt würde.

while True:
    checkLatestNews()
    #Überprüfen Sie alle 5 Minuten * Ändern Sie nach Bedarf
    sleep(300)

Verbinden Sie jeden Prozess

Verbinden Sie die Verarbeitung bisher.

line_notify.py


import requests
import feedparser
from time import sleep
import os
 
#Greifen Sie auf RSS zu und erhalten Sie die neueste URL
def getRssFeedData():
    #Beschreiben Sie die URL von rdf, auf die zugegriffen werden soll
    RSS_URL = 'https://www.mhlw.go.jp/stf/news.rdf'
    xml = feedparser.parse(RSS_URL)
    for entry in xml.entries:
        #Extrahieren Sie die erste URL der neuen Seite aus dem Link
        if('newpage' in entry.link):
            print(entry.link)
            return entry.link
 
#Methode zur Benachrichtigung von LINE
def lineNotify(url):
    #Listen Sie das ausgegebene Token auf
    LINE_NOTIFY_TOKEN = '1234567890abcdefghijklmnopqrstuvwxyz'
 
    #Listen Sie die API-URL von LINE Notify auf
    LINE_NOTIFY_API = 'https://notify-api.line.me/api/notify'
 
    message = '\n Es gibt die neuesten Informationen des Ministeriums für Gesundheit, Arbeit und Soziales.\n' + url
    payload = {'message': message}
    headers = {'Authorization': 'Bearer ' + LINE_NOTIFY_TOKEN }
 
    #Machen Sie eine LINE-Benachrichtigung
    requests.post(LINE_NOTIFY_API, data=payload, headers=headers)
 
#Überprüfen Sie, ob die URL aktualisiert wurde
def checkLatestNews():
    rss_url = getRssFeedData()
    path = './latest_url.txt'
 
    # latest_url.Wenn kein txt vorhanden ist, erstellen Sie einen neuen
    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()
 
    #Suchen Sie nach neuen Informationen
    if (local_url == rss_url):
        print('Es gab keine neuen Informationen')
    else:
        #LINE-Benachrichtigung
        lineNotify(rss_url)
        with open(path, mode='w') as file:
            string = rss_url
            file.write(string)
        print('Ich habe Sie benachrichtigt, weil es neue Informationen gab')
    
while True:
    checkLatestNews()
    #Überprüfen Sie alle 5 Minuten * Ändern Sie nach Bedarf
    sleep(300)

Komplett! ✨ (Kimagure Cook-Stil)

Lokal ausführen.

$ python line_notify.py

https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Ich habe Sie benachrichtigt, weil es neue Informationen gab
https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Es gab keine neuen Informationen
https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Es gab keine neuen Informationen
https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00016.html
Es gab keine neuen Informationen
・ ・ ・

Ich habe eine Benachrichtigung erhalten. LINE.PNG

Verbesserung

Ich denke, es gibt noch Raum für Verbesserungen, z. B. das Erhöhen auf Lambda und das Verschieben von Umgebungsvariablen in die env-Datei. Ich möchte es zu Lambda bringen und es regelmäßig laufen lassen.

Recommended Posts

[Python] Erstellen Sie ein Skript, das FeedParser und LINE Notify verwendet, um LINE über die neuesten Informationen zum neuen Koronavirus des Ministeriums für Gesundheit, Arbeit und Soziales zu informieren.
[Python] Lesen Sie automatisch Informationen der Präfektur des neuen Koronavirus aus dem PDF des Ministeriums für Gesundheit, Arbeit und Soziales und schreiben Sie sie in eine Tabelle oder in Excel.
Verwenden Sie AWS Lambda, um Nachrichten zu kratzen und LINE regelmäßig über Updates zu informieren [Python]
[Python] Informationen zum Erstellen eines Tools zum Erstellen einer neuen Outlook-E-Mail basierend auf den Daten der JSON-Datei und dem Teil, der abgefangen wurde
Daten Langling PDF über den Ausbruch der Influenza durch das Ministerium für Gesundheit, Arbeit und Soziales
Datenbereinigung offener Daten zur Ereignissituation des Ministeriums für Gesundheit, Arbeit und Soziales
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ein Skript, mit dem Sie mit der LINE Messaging-API auf einfache Weise umfangreiche Menüs erstellen können
PDF-Datei mit der nationalen Liste der Mindestlöhne nach Regionen des Ministeriums für Gesundheit, Arbeit und Soziales
Python-Skript, das den Status des Servers über den Browser überprüfen kann
[Python] Ein Programm, um die Anzahl der Äpfel und Orangen zu ermitteln, die geerntet werden können
Python-Skript, das den Inhalt zweier Verzeichnisse vergleicht
Ich habe versucht, ein Skript zu erstellen, das die Tweets eines bestimmten Benutzers auf Twitter verfolgt und das veröffentlichte Bild sofort speichert
[Python] Ich habe versucht, mit argparse ein einfaches Programm zu erstellen, das in der Befehlszeile funktioniert
[Python] Lassen Sie sich täglich von LINE über das Ranking der Suchergebnisse auf Ihrer Website informieren.
[Python] LINE-Benachrichtigung über die neuesten Informationen mithilfe der automatischen Suche von Twitter
Ein Skript, das 0, 1 an die erste Python-Primzahl zurückgibt
Ein Python-Skript, das auf dem Mac erstellte ._DS_Store- und ._ * -Dateien löscht
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
[Python] Ein Programm, das den Inhalt der Liste nach links dreht
[Python / Jupyter] Übersetzen Sie den Kommentar des in die Zwischenablage kopierten Programms und fügen Sie ihn in eine neue Zelle ein.
Ich habe ein POST-Skript erstellt, um ein Problem in Github zu erstellen und es im Projekt zu registrieren
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
[Python] Erstellen Sie einen Linebot, um den Namen und das Alter auf das Bild zu schreiben
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
Folding @ Home unter Linux Mint soll zur Analyse des neuen Corona-Virus beitragen
[Python] Ich habe ein Skript erstellt, das Dateien auf dem lokalen PC automatisch ausschneidet und auf eine externe SSD einfügt.
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
Python-Skript, das SQL-Dateien liest, BigQuery ausführt und CSV speichert
Erstellen Sie einen BOT, der die Anzahl der infizierten Personen in der neuen Corona anzeigt
Erstellen Sie eine Python-Umgebung, um die Theorie und Implementierung von Deep Learning zu erlernen
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
[Python] Ein Programm, das die Differenz zwischen diagonalen Gesamtwerten berechnet
[Python] Ein Programm, das die Anzahl der Aktualisierungen der höchsten und niedrigsten Datensätze berechnet
Python-Skript zum Abrufen einer Liste von Eingabebeispielen für den AtCoder-Wettbewerb
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet