[PYTHON] Publié le nombre de nouveaux positifs corona à Tokyo sur Slack (déployés sur Heroku)

Dans [Article précédent] 1, nous avons introduit un bot qui publie [Nombre de personnes positives pour le nouveau virus corona à Tokyo] 2 sur Slack.

Cet article est la suite de cela.

Points de développement supplémentaires de la fois précédente

Comme indiqué ci-dessous, il a été automatiquement publié après la mise à jour des données d'aujourd'hui.

c19bot_28.PNG

Développement 1: publier automatiquement sur Slack après la mise à jour des données

[Page où Tokyo publie des données] J'ai vérifié les données csv obtenues à partir de 2 et je les ai implémentées de sorte que s'il y a une différence, je les posterai.

[Dernière fois] 1 Appelons la méthode créée pour publier sur Slack fdap.main (). Ensuite, préparez fdap.main () comme run2.py comme code source à exécuter après la mise à jour de [Tokyo data] 2.

Le contenu de 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"Récupère la dernière ligne d'une colonne
    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(): #Après la deuxième boucle
            updated, csv_tail_no = check_data(csv_tail_no)
        else: #1ère boucle
            updated, csv_tail_no = check_data(0)
        if updated:
            fdap.main() #Publier sur Slack
        time.sleep(60*5) #5 minutes

if __name__ == "__main__":
    main()

Dans check_data (last_no), vérifiez la colonne No dans la dernière ligne de [Tokyo data] 2, et s'il y a une différence avec la confirmation précédente, décrivez le processus pour qu'il soit publié sur Slack. Faire.

En ce qui concerne la méthode de jugement de différence, cette fois, nous utilisons cette méthode dans un souci de facilité de mise en œuvre, mais il peut être plus intelligent de gratter la date et l'heure de modification du fichier. Cependant, j'ai vu [la page où les données de Tokyo sont publiées] 2 plusieurs fois, mais il semblait que la date et l'heure de la dernière mise à jour ne correspondaient pas à la date et l'heure de mise à jour des données, alors j'ai gratté la date et l'heure de mise à jour. J'ai senti que j'avais besoin de prendre d'autres mesures.

Le jugement des données est décrit pour être exécuté à intervalles réguliers. Afin de ne pas accéder aux données plus que nécessaire, je mets un sommeil de 5 minutes cette fois.

Développement 2: déployer avec Heroku

Puisque python3 run2.py est toujours exécuté, préparez l'environnement d'exécution avec Heroku.

Préparez les fichiers nécessaires

Préparez runtime.txt, requirements.txt, Procfile.

Dans runtime.txt, décrivez la version lors du déploiement avec Heroku.

runtime.txt


python-3.6.10

Décrivez les modules requis dans requirements.txt. Créé avec pip freeze> requirements.txt.

(J'ai supprimé manuellement les modules qui semblaient inutiles, mais ils sont peut-être toujours là ...)

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 décrit le nom du processus et la commande que vous souhaitez exécuter.

Procfile


c19bot: python3 run2.py

Réglage

Créez un compte Heroku à l'avance.

Connectez-vous à Heroku à partir de votre navigateur et créez une nouvelle application avec un nom d'application approprié (sélectionnez Nouveau-> Créer une nouvelle application en haut à droite de l'écran).

Dans l'onglet Paramètres, sous Build packs, sélectionnez Python. Saisissez également les variables d'environnement requises (Slack Token, nom du canal, etc.) dans Config Vars.

Le reste du travail est effectué dans la CLI Heroku. Après vous être connecté avec Heroku login et refléter le code source à distance, le déploiement est terminé avec heroku scale [nom du processus] = 1.

Points à noter (variables environnementales)

Lors du développement local, les variables d'environnement sont implémentées pour être lues à partir du fichier .env.

Voici un exemple du code source.

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 "

Cette fois, vous devez enregistrer l'image (graphique du nombre de personnes positives) publiée sur Slack en tant que fichier temporaire. Si le nom de l'image est hist.png, vous pouvez l'enregistrer dans le répertoire courant comme PNG =" ./hist " lors du développement local, mais lors du déploiement avec Heroku, nommez le fichier . Le paramétrer sur "/ tmp / hist" (enregistrez-le sous / tmp) fonctionne très bien. Par conséquent, lors du développement local, le nom de fichier de l'image est également ajouté à l'avance à la variable d'environnement et le nom de fichier est spécifié séparément dans Heroku.

Choses à surveiller (cycle de vie de Dyno)

Le processus de Heroku semble être redémarré automatiquement sur une base régulière.

Référence: https://jp.heroku.com/dynos/lifecycle (cycle de vie de Heroku Dyno)

Au départ, j'ai écrit un programme pour publier les dernières informations sur Slack une fois au démarrage de python3 run2.py. Cependant, environ un jour après le déploiement avec Heroku, il y avait un bogue qui, d'une manière ou d'une autre, [Tokyo data] 2 était posté sur Slack même s'il n'était pas mis à jour.

Après avoir enquêté, j'ai remarqué que le processus Heroku avait peut-être été redémarré automatiquement et j'ai corrigé le programme. Actuellement, la spécification est que lorsque python3 run2.py est démarré, il ne sera pas publié sur Slack, mais sera publié sur Slack pour la première fois lorsque les données à Tokyo seront mises à jour après son démarrage.

Résumé

[Article précédent] Dans la continuité de 1, nous avons automatisé le bot qui affiche le nombre de nouveaux positifs de virus corona à Tokyo dans Slack et l'avons déployé sur Heroku (résident).

Les informations publiées sur Slack doivent être considérées comme des informations supplémentaires uniquement, et je voudrais essayer de vérifier [Les dernières tendances en matière d'infection à Tokyo publiées sur le site officiel de Tokyo] 3 une fois par jour. Je vais.

c'est tout.

Recommended Posts

Publié le nombre de nouveaux positifs corona à Tokyo sur Slack (déployés sur Heroku)
Créez un bot qui publie sur Slack le nombre de personnes positives pour le nouveau virus corona à Tokyo
Comment obtenir le nombre de chiffres en Python
Essayez d'estimer le nombre de likes sur Twitter
Comment trouver le nombre optimal de clusters pour les k-moyennes
Comptez le nombre de caractères dans le texte dans le presse-papiers sur Mac
J'ai essayé de trouver la tendance du nombre de navires dans la baie de Tokyo à partir d'images satellites.
J'ai essayé de créer un Discord Bot sur Docker qui signale le nombre de personnes infectées par corona à Tokyo à un moment spécifié
Utilisez PyCaret pour prédire le prix des appartements d'occasion à Tokyo!
J'ai essayé de prédire le nombre de personnes infectées au niveau national de la nouvelle corona avec un modèle mathématique
J'ai dessiné un graphique Python en utilisant des données publiques sur le nombre de nouveaux patients positifs au coronavirus (COVID-19) à Tokyo + avec un lien vers la version nationale des données de pratique
Obtenez le nombre de lecteurs d'articles sur Mendeley en Python
J'ai essayé d'adapter la fonction exponentielle et la fonction logistique au nombre de patients positifs au COVID-19 à Tokyo
Le nombre de fermetures de magasins a-t-il augmenté en raison de l'influence du nouveau virus corona?
Convertir le PDF d'un nouveau cas d'épidémie corona dans la préfecture d'Aichi en CSV
Folding @ Home sur Linux Mint pour contribuer à l'analyse du nouveau virus corona
Changer l'ordre de PostgreSQL dans Heroku
Comment mentionner un groupe d'utilisateurs avec une notification de mou, comment vérifier l'ID d'un groupe d'utilisateurs
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Définir la limite supérieure du nombre de répétitions de fonctions récursives en Python
Trouvez le nombre de jours dans un mois
Commerce de système à partir de Python3: les stocks de bio-santé à examiner dans le nouveau Corona
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Un moyen simple de remplir le début de 0 en fonction du nombre de chiffres dans le nombre [Python]
Trouvez une ligne directrice pour le nombre de processus / threads à définir sur le serveur d'applications
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Quelle est la force de votre Qiita? Statistiques sur le nombre de Contributes visibles dans les données
Comment générer le nombre de vues, de likes et de stocks d'articles publiés sur Qiita au format CSV (créé avec "Python + Qiita API v2")
Comment connaître le numéro de port du service xinetd
Mémo de déploiement de Django × Postgresql sur Docker vers Heroku
Obtenir la taille (nombre d'éléments) de Union Find en Python
Différence de résultats en fonction de l'argument du multiprocessus.
[Python] Obtenez le nombre de vues de tous les articles publiés
Pour faire l'équivalent de Ruby ObjectSpace._id2ref en Python
Utilisez le hachage pour alléger le jugement de collision d'environ 1000 balles en Python (lié au nouveau virus corona)
J'ai essayé de classer le nombre de décès par habitant de COVID-19 (nouveau virus corona) par pays
[Pour les débutants] Je souhaite expliquer le nombre d’apprentissage d’une manière facile à comprendre.
[Python] Programmation pour trouver le nombre de a dans une chaîne de caractères qui se répète un nombre spécifié de fois.
Comment spécifier un nombre infini de tolérances dans le contrôle de validation d'argument numérique d'argparse
Notification Slack lorsqu'un mot spécifique est murmuré sur Twitter en utilisant Heroku avec python
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
[Traitement du langage naturel] J'ai essayé de visualiser les remarques de chaque membre de la communauté Slack
Si les habitants de Tokyo tombent gravement malades du nouveau virus corona, ils peuvent être emmenés dans un hôpital de la préfecture de Kagoshima.