In [Vorheriger Artikel] 1 haben wir einen Bot vorgestellt, der [Anzahl der Personen, die in Tokio positiv für das neue Koronavirus sind] 2 bei Slack veröffentlicht.
Dieser Artikel ist die Fortsetzung davon.
Wie unten gezeigt, wurde es nach der heutigen Datenaktualisierung automatisch veröffentlicht.
[Seite, auf der Tokio Daten veröffentlicht] Ich habe die von 2 erhaltenen CSV-Daten überprüft und implementiert, sodass ich sie veröffentlichen werde, wenn es einen Unterschied gibt.
[Letztes Mal] 1 Rufen wir die erstellte Methode auf, um sie in Slack fdap.main ()
zu posten.
Bereiten Sie dann "fdap.main ()" als "run2.py" als Quellcode vor, der ausgeführt werden soll, nachdem [Tokyo data] 2 aktualisiert wurde.
Der Inhalt von run2.py
.
run2.py
import run as fdap
import post
import plot
import time
import datetime
def check_data(last_no):
csv_tail_no = plot.fetch_csv().iat[-1,0] # "No"Holen Sie sich die letzte Zeile einer Spalte
if int(last_no) == 0:
return False, csv_tail_no # initialize
elif int(csv_tail_no) > int(last_no):
return True, csv_tail_no
else:
return False, csv_tail_no
def main():
while True:
if "csv_tail_no" in locals(): #Nach der zweiten Schleife
updated, csv_tail_no = check_data(csv_tail_no)
else: #1. Schleife
updated, csv_tail_no = check_data(0)
if updated:
fdap.main() #Post an Slack
time.sleep(60*5) #5 Minuten
if __name__ == "__main__":
main()
Überprüfen Sie in "check_data (last_no)" die Spalte "No" in der letzten Zeile von [Tokyo data] 2. Wenn es einen Unterschied zur vorherigen Bestätigung gibt, beschreiben Sie den Vorgang, damit er an Slack gesendet wird. tun.
In Bezug auf die Differenzbeurteilungsmethode verwenden wir diese Methode dieses Mal, um die Implementierung zu vereinfachen. Es kann jedoch klüger sein, das Änderungsdatum und die Änderungszeit der Datei zu kratzen. Ich habe [die Seite, auf der die Daten von Tokio veröffentlicht werden] 2 mehrmals gesehen, aber es schien, dass das Datum und die Uhrzeit der letzten Aktualisierung nicht mit dem Aktualisierungszeitpunkt der Daten übereinstimmten, sodass ich das Aktualisierungsdatum und die Aktualisierungszeit abgekratzt habe. Ich hatte das Gefühl, dass ich andere Maßnahmen ergreifen musste.
Es wird beschrieben, dass die Datenbeurteilung in regelmäßigen Abständen ausgeführt wird. Um nicht mehr als nötig auf die Daten zuzugreifen, habe ich diesmal 5 Minuten geschlafen.
Da python3 run2.py
immer ausgeführt wird, bereiten Sie die Ausführungsumgebung mit Heroku vor.
Bereiten Sie runtime.txt
, require.txt
, Procfile
vor.
Beschreiben Sie in runtime.txt
die Version bei der Bereitstellung mit Heroku.
runtime.txt
python-3.6.10
Beschreiben Sie die erforderlichen Module in require.txt
.
Erstellt mit pip freeze> require.txt
.
(Ich habe die Module manuell gelöscht, die unnötig erschienen, aber möglicherweise noch vorhanden sind ...)
requirements.txt
jsonpatch==1.10
jsonpointer==1.9
python-dotenv==0.12.0
requests==2.9.1
slackbot==0.5.6
matplotlib==3.0.3
numpy==1.18.1
pandas==0.24.2
scipy==1.4.1
Procfile
beschreibt den Prozessnamen und den Befehl, den Sie ausführen möchten.
Procfile
c19bot: python3 run2.py
Erstellen Sie im Voraus ein Heroku-Konto.
Melden Sie sich über Ihren Browser bei Heroku an und erstellen Sie eine neue Anwendung mit einem entsprechenden App-Namen (wählen Sie oben rechts auf dem Bildschirm Neu-> Neue App erstellen).
Wählen Sie auf der Registerkarte Einstellungen unter Build Packs die Option Python aus. Geben Sie außerdem die erforderlichen Umgebungsvariablen (Slack Token, Kanalname usw.) in Config Vars ein.
Der Rest der Arbeit wird in der Heroku-CLI erledigt. Nachdem Sie sich mit "Heroku-Login" angemeldet und den Quellcode remote wiedergegeben haben, wird die Bereitstellung mit "Heroku-Skala [Prozessname] = 1" abgeschlossen.
Bei der lokalen Entwicklung werden die Umgebungsvariablen so implementiert, dass sie aus der .env-Datei gelesen werden können.
Unten finden Sie ein Beispiel für den Quellcode.
from dotenv import load_dotenv
load_dotenv(dotenv_path=".env") # load local .env
import os
SLACK_TOKEN = os.environ["SLACK_TOKEN"]
USER_NAME = os.environ["USER_NAME"]
SLACK_CHANNEL = os.environ["SLACK_CHANNEL"]
CHANNEL_ID = os.environ["CHANNEL_ID"]
PNG = os.environ["PNG"]
PNG_FILE = PNG+".png "
Dieses Mal müssen Sie das in Slack veröffentlichte Bild (Diagramm der Anzahl der positiven Personen) als temporäre Datei speichern.
Wenn der Image-Name "hist.png " lautet, können Sie ihn bei der lokalen Entwicklung im aktuellen Verzeichnis wie "PNG =" ./hist "" speichern. Wenn Sie ihn jedoch mit Heroku bereitstellen, benennen Sie die Datei ". Das Setzen auf "/ tmp / hist" (speichern Sie es unter
/ tmp`) funktioniert einwandfrei.
Daher wird bei der lokalen Entwicklung der Dateiname des Bildes vorab auch der Umgebungsvariablen hinzugefügt, und der Dateiname wird in Heroku separat angegeben.
Herokus Prozess scheint regelmäßig automatisch neu gestartet zu werden.
Referenz: https://jp.heroku.com/dynos/lifecycle (Lebenszyklus von Heroku Dyno)
Anfangs habe ich ein Programm geschrieben, um die neuesten Informationen einmal in Slack zu veröffentlichen, als python3 run2.py
gestartet wurde.
Ungefähr einen Tag nach der Bereitstellung mit Heroku gab es jedoch einen Fehler, der irgendwie [Tokio-Daten] 2 in Slack gepostet wurde, selbst wenn es nicht aktualisiert wurde.
Nach der Untersuchung stellte ich fest, dass der Heroku-Prozess möglicherweise automatisch neu gestartet wurde, und korrigierte das Programm.
Derzeit lautet die Spezifikation, dass python3 run2.py
beim Starten nicht in Slack, sondern zum ersten Mal in Slack veröffentlicht wird, wenn die Daten in Tokio nach dem Start aktualisiert werden.
[Vorheriger Artikel] In Fortsetzung von 1 haben wir den Bot, der die Anzahl der neuen Corona-Virus-Positiven in Tokio veröffentlicht, an Slack automatisiert und auf Heroku (ansässig) bereitgestellt.
Die auf Slack veröffentlichten Informationen sollten nur als ergänzende Informationen verwendet werden, und ich möchte versuchen, die neuesten auf der offiziellen Website von Tokio veröffentlichten Infektionstrends in Tokio 3 einmal täglich zu überprüfen. Ich werde.
das ist alles.
Recommended Posts