[PYTHON] Veröffentlichte die Anzahl der neuen Corona-Positiven in Tokio an Slack (auf Heroku bereitgestellt)

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.

Zusätzliche Entwicklungspunkte aus der vorherigen Zeit

Wie unten gezeigt, wurde es nach der heutigen Datenaktualisierung automatisch veröffentlicht.

c19bot_28.PNG

Entwicklung 1: Nach Aktualisierung der Daten automatisch an Slack senden

[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.

Entwicklung 2: Bereitstellung mit Heroku

Da python3 run2.py immer ausgeführt wird, bereiten Sie die Ausführungsumgebung mit Heroku vor.

Bereiten Sie die erforderlichen Dateien 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

Aufbau

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.

Zu beachtende Punkte (Umgebungsvariablen)

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.

Dinge, auf die Sie achten sollten (Dynos Lebenszyklus)

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.

Zusammenfassung

[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

Veröffentlichte die Anzahl der neuen Corona-Positiven in Tokio an Slack (auf Heroku bereitgestellt)
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
So ermitteln Sie die Anzahl der Stellen in Python
Versuchen Sie, die Anzahl der Likes auf Twitter zu schätzen
So finden Sie die optimale Anzahl von Clustern für k-means
Zählen Sie die Anzahl der Zeichen im Text in der Zwischenablage auf dem Mac
Ich habe versucht, den Trend der Anzahl der Schiffe in der Bucht von Tokio anhand von Satellitenbildern zu ermitteln.
Verwenden Sie PyCaret, um den Preis von Gebrauchtwohnungen in Tokio vorherzusagen!
Ich habe versucht, die Anzahl der im Inland infizierten Menschen der neuen Korona mit einem mathematischen Modell vorherzusagen
Ich habe ein Python-Diagramm mit öffentlichen Daten zur Anzahl der neuen Coronavirus (COVID-19) -positiven Patienten in Tokio + mit einem Link zur nationalen Version der Praxisdaten gezeichnet
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Ich habe versucht, die Exponentialfunktion und die Logistikfunktion an die Anzahl der COVID-19-positiven Patienten in Tokio anzupassen
Hat die Anzahl der Ladenschließungen aufgrund des Einflusses des neuen Koronavirus zugenommen?
Konvertieren Sie das PDF des neuen Corona-Ausbruchs in der Präfektur Aichi in CSV
Folding @ Home unter Linux Mint soll zur Analyse des neuen Corona-Virus beitragen
Ändern Sie die Reihenfolge von PostgreSQL in Heroku
Wie man eine Benutzergruppe mit Slack-Benachrichtigung erwähnt, wie man die ID einer Benutzergruppe überprüft
Ich möchte Python in der Umgebung von pyenv + pipenv unter Windows 10 verwenden
Legen Sie die Obergrenze für die Anzahl der Wiederholungen rekursiver Funktionen in Python fest
Finden Sie die Anzahl der Tage in einem Monat
Systemhandel beginnend mit Python3: Bio-Health-Aktien in der neuen Corona
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
Einfache Möglichkeit, 0 abhängig von der Anzahl der Ziffern vorangestellt [Python]
Suchen Sie eine Richtlinie für die Anzahl der Prozesse / Threads, die auf dem Anwendungsserver festgelegt werden sollen
So zählen Sie die Anzahl der Vorkommen jedes Elements in der Liste in Python mit der Gewichtung
Wie stark ist dein Qiita? Statistiken über die Anzahl der in den Daten angezeigten Beiträge
So geben Sie die Anzahl der ANSICHTEN, Likes und Bestände von Artikeln aus, die in Qiita an CSV gesendet wurden (erstellt mit "Python + Qiita API v2")
Wie man die Portnummer des xinetd-Dienstes kennt
Memo zur Bereitstellung von Django × Postgresql auf Docker für Heroku
Ermitteln Sie die Größe (Anzahl der Elemente) von Union Find in Python
Unterschied in den Ergebnissen abhängig vom Argument von multiprocess.Process
[Python] Ermittelt die Anzahl der Aufrufe aller veröffentlichten Artikel
Um das Äquivalent von Rubys ObjectSpace._id2ref in Python zu tun
Verwenden Sie Hash, um das Kollisionsurteil von etwa 1000 Bällen in Python zu erleichtern (im Zusammenhang mit dem neuen Corona-Virus).
Ich habe versucht, die Anzahl der Todesfälle pro Kopf von COVID-19 (neues Koronavirus) nach Ländern zu tabellieren
[Für Anfänger] Ich möchte die Anzahl der Lernerfahrungen leicht verständlich erklären.
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.
So geben Sie eine unendliche Anzahl von Toleranzen in der Überprüfung der numerischen Argumentvalidierung von argparse an
Slack-Benachrichtigung, wenn ein bestimmtes Wort auf Twitter mit Heroku mit Python gemurmelt wird
Wie man die Anzahl der GPUs aus Python kennt ~ Hinweise zur Verwendung von Multiprocessing mit pytorch ~
[Verarbeitung natürlicher Sprache] Ich habe versucht, die Bemerkungen jedes Mitglieds in der Slack-Community zu visualisieren
Wenn die Menschen in Tokio ernsthaft an dem neuen Koronavirus erkranken, können sie in ein Krankenhaus in der Präfektur Kagoshima gebracht werden.