Notifier slack lorsque la page de vente du commutateur est mise à jour ~ développement de bot slack avec python ③ ~

Que faire dans cet article

Assurez-vous que Slack est averti lorsque la page de vente du commutateur est mise à jour comme ci-dessous

スクリーンショット 2017-07-06 22.20.49.png

Dès la conclusion, j'ai été averti correctement, mais je n'ai pas pu l'acheter. J'ai vérifié le site immédiatement après la mise à jour de la page de vente, mais immédiatement après la mise à jour, il était en panne en raison de la concentration d'accès, et lorsqu'il a été restauré, il était déjà épuisé ...

À l'heure actuelle, il semble qu'il sera épuisé dans environ 10 minutes. La personne qui peut acheter reçoit-elle non seulement la notification de mise à jour de la page, mais automatise également le processus d'achat? J'ai pensé que j'abandonnerais jusqu'à ce que l'offre augmente.

méthode

J'ai pensé essayer le web scraping tout en étudiant, mais à la fin, j'ai obtenu le contenu avec curl -o toutes les 30 minutes et j'ai notifié slack s'il y avait une différence par rapport au contenu précédemment acquis. ..

Ce n'est pas une très bonne implémentation car vous serez averti même si une autre mise à jour est effectuée sur la page de vente.

Cette fois aussi, nous l'ajouterons au programme créé en ① Apportez quelques modifications à la structure des répertoires. Créez simplement le répertoire files_dir directement sous les plugins.

Création automatique de tickets JIRA avec slack bot ~ développement de slack bot avec python ① ~

slackbot         #Un annuaire qui organise les programmes. N'importe quel nom va bien
├─ run.py        #Démarrez le bot en exécutant ce programme
├─ slackbot_settings.py   #Fichier pour écrire les paramètres liés au bot
└─ plugins                #Ajouter une fonctionnalité de bot à ce répertoire
   ├─ __init__.py         #Un fichier pour indiquer le module. Vider c'est bien
   └─ my_mention.py       #Présente chaque fichier. N'importe quel nom va bien
   └─ files_dir           #Stocker le contenu acquis par curl dans ce répertoire
       ├─ switch.html_1     #Contenu acquis par curl
       └─ switch.html_2     #Contenu acquis par curl
       └─ switch.html_3..4..5..6.. 

La cible à modifier est à nouveau my_mention.py. Ajoutez ce qui suit au script:

Programme (my_mention.py)

import time
import subprocess
from subprocess import check_output, CalledProcessError

      1 @respond_to('get_switch')
      2 def get_switch(message):
      3     print('get_switch_contents')
      4     script_dir = os.path.abspath(os.path.dirname(__file__))
      5     files_dir = os.path.join(script_dir, "files_dir")
      6     file_number = 1
      7     dest_url = "https://store.nintendo.co.jp/customize.html"
      8     #Exécuter la commande toutes les 30 minutes
      9     sleep_time = 1800
     10     try:
     11         while True:
     12             curl_cmd = "curl -o ./plugins/files_dir/swith.html_%s %s" %(file_number, dest_url)
     13             diff_cmd = "diff -u ./plugins/files_dir/swith.html_%s ./plugins/files_dir/swith.html_%s" %((file_number - 1), file_number)
     14
     15 #Exécutez la commande curl pour obtenir le contenu. Ignorer car il n'y a pas de cible de différence lors de la première exécution
     16             subprocess.call(curl_cmd, shell=True)
     17             if file_number == 1:
     18                 file_number += 1
     19                 continue
     20
     21 #Vérifiez le résultat de diff. Différer le code de retour_Stocker en résultat
     22             diff_result = subprocess.call(diff_cmd, shell=True, stderr=subprocess.        STDOUT, timeout=3, universal_newlines=True)
     23             print("return code of diff command is %s" % diff_result)
     24
     25             if diff_result == 0:
     26                 if os.path.exists(os.path.join(files_dir, "swith.html_%s") %(file_number - 3)):
     27                     os.remove(os.path.join(files_dir, "swith.html_%s" % (file_number - 3)))
     28                 file_number += 1
     29                 time.sleep(sleep_time)
     30                 continue
     31             else:
     32                 message.reply('La page de commutation a été mise à jour!Confirmation urgente! https://store.nintendo.co.jp/customize.html %s' % (admin))
     33                 break
     34     except subprocess.CalledProcessError as e:
     35         print("Arguments d'exception:", e.args)

Où j'ai eu du mal

J'utilise la bibliothèque de sous-processus pour exécuter le shell en python, mais j'avais du mal à comprendre comment recevoir et traiter le code de retour. Si c'est un shell, vous pouvez obtenir 0 s'il n'y a pas de différence avec echo $? Après avoir émis la commande diff, et 1 s'il y a ...

[root@target slackbot]# echo $?
0
[root@target slackbot]#

Après tout, il est mis en œuvre comme suit

 subprocess.call(diff_cmd, shell=True, stderr=subprocess.STDOUT ,timeout=3, universal_newlines=True)

En regardant le document officiel, il y avait une description comme suit

sortie standard Captured stdout from the child process. A bytes sequence, or a string if run() was called with an encoding or errors. None if stdout was not captured. Si le processus a été exécuté avec stderr = subprocess.STDOUT, cet attribut contient un mélange de sortie standard et de sortie d'erreur standard, et stderr vaut None. https://docs.python.jp/3/library/subprocess.html

Cette fois, le résultat reçu est stocké dans une variable appelée diff_result, s'il n'y a pas de différence, il est répété avec continue, le fichier d'il y a 3 générations est supprimé, et s'il y a une différence = c'est-à-dire, si la page est mise à jour, il est notifié par slack. je l'ai fait

Cependant, il semble que je ne puisse pas l'acheter pour le moment ...

Je pense qu'on me refusera si j'accède à chaque minute ou si je fais quelque chose avec un faible nombre de personnes, donc c'est absolument NG. Le bon sens est important ...

Relation

Création automatique de tickets JIRA avec slack bot ~ développement de slack bot avec python ① ~ Ticket JIRA avec bot slack → Automatisation de la notification Slack ~ développement de bot slack avec python② ~ Avertir slack lorsque la page de vente du commutateur est mise à jour ~ développement de bot slack avec python ③ ~ Demandez au bot de vous indiquer la météo (informations sur les précipitations) à l'aide de l'API d'informations météorologiques (YOLP) fournie par Yahoo ~ développement du bot slack ④ ~ avec python

Recommended Posts

Notifier slack lorsque la page de vente du commutateur est mise à jour ~ développement de bot slack avec python ③ ~
Création automatique de tickets JIRA avec slack bot ~ développement de slack bot avec python ① ~
Écrivez un script dans Shell et Python pour vous avertir dans Slack lorsque le processus est terminé
Notifier Slack lorsque la commande Linux se termine
Notifier à l'aide du Centre de notifications lorsque l'environnement d'exécution est macOS en Python
python Comment notifier automatiquement par téléphone lorsque le système tombe en panne
Notifier Slack lorsque le processus d'apprentissage automatique en cours d'exécution sur GCP est terminé
Lorsque le journal acquis par rsyslog n'est pas mis à jour après la rotation avec logrotate
La requête [Développement Web avec Python] est également redirigée
[Développement Web avec Python] Précautions lors de l'enregistrement des cookies
Demandez au bot de vous indiquer la météo (informations sur les précipitations) à l'aide de l'API d'informations météorologiques (YOLP) fournie par Yahoo ~ développement de bot slack avec python ④ ~
[Python Data Frame] Lorsque la valeur est vide, remplissez-la avec la valeur d'une autre colonne.
[Introduction à Python] Quel est l'important "if __name__ == '__ main__':" lorsqu'il s'agit de modules?
Electron est la meilleure solution pour le développement multi-plateforme de Python
Lire et écrire des fichiers avec Slackbot ~ Développement de bot avec Python ~
Vérifier quand la version ne change pas dans pyenv
Utilisons AWS Lambda pour créer un mécanisme pour notifier Slack lorsque la valeur surveillée par CloudWatch est dépassée sur Python
Notification Slack lorsqu'un mot spécifique est murmuré sur Twitter en utilisant Heroku avec python
L'histoire de la mise en œuvre du sujet Facebook Messenger Bot avec python
Unifier l'environnement de l'équipe de développement Python en commençant par Poetry
Un mémo lorsque le visage est détecté avec Python + OpenCV rapidement
[Part.2] Exploration avec Python! Cliquez sur la page Web pour vous déplacer!
Créez un Twitter BOT avec le SDK GoogleAppEngine pour Python
Comment entrer dans l'environnement de développement Python avec Vagrant
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack
Récupérez la source de la page à charger indéfiniment avec python.
Comment gérer le problème du déplacement du répertoire actuel lorsque Python est exécuté depuis Atom
L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python