Assurez-vous que Slack est averti lorsque la page de vente du commutateur est mise à jour comme ci-dessous
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.
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:
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)
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 ...
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