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.
Installieren Sie die erforderlichen Bibliotheken mit pip.
$ pip install feedparser requests
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
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.
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')
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 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 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)
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.
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.