Stellen Sie sicher, dass Slack benachrichtigt wird, wenn die Switch-Verkaufsseite wie folgt aktualisiert wird
Aus dem Fazit wurde ich ordnungsgemäß benachrichtigt, konnte es aber nicht kaufen. Ich habe die Website sofort nach der Aktualisierung der Verkaufsseite überprüft, aber unmittelbar nach der Aktualisierung war sie aufgrund der Zugriffskonzentration nicht verfügbar, und als sie wiederhergestellt wurde, war sie bereits ausverkauft ...
Derzeit scheint es, dass es in etwa 10 Minuten ausverkauft sein wird. Erhält die Person, die kaufen kann, nicht nur die Benachrichtigung über die Seitenaktualisierung, sondern automatisiert auch den Kaufprozess? Ich dachte, ich würde aufgeben, bis das Angebot zunahm.
Ich dachte, ich würde versuchen, das Web während des Studiums zu kratzen, aber am Ende bekam ich den Inhalt alle 30 Minuten mit curl -o und benachrichtigte slack, wenn es einen Unterschied zu dem zuvor erworbenen Inhalt gab. ..
Es ist keine sehr gute Implementierung, da Sie benachrichtigt werden, auch wenn auf der Verkaufsseite ein weiteres Update vorgenommen wird.
Auch dieses Mal werden wir es dem in ① erstellten Programm hinzufügen Nehmen Sie einige Änderungen an der Verzeichnisstruktur vor. Erstellen Sie einfach das Verzeichnis files_dir direkt unter den Plugins.
Automatische JIRA-Ticketerstellung mit Slack-Bot ~ Slack-Bot-Entwicklung mit Python ① ~
slackbot #Ein Verzeichnis, das Programme organisiert. Jeder Name ist in Ordnung
├─ run.py #Starten Sie den Bot, indem Sie dieses Programm ausführen
├─ slackbot_settings.py #Datei zum Schreiben von Einstellungen für Bot
└─ plugins #Fügen Sie diesem Verzeichnis Bot-Funktionen hinzu
├─ __init__.py #Eine Datei zur Angabe des Moduls. Leer ist in Ordnung
└─ my_mention.py #Verfügt über jede Datei. Jeder Name ist in Ordnung
└─ files_dir #Speichern Sie den von curl erfassten Inhalt in diesem Verzeichnis
├─ switch.html_1 #Durch Curl erworbene Inhalte
└─ switch.html_2 #Durch Curl erworbene Inhalte
└─ switch.html_3..4..5..6..
Das zu bearbeitende Ziel ist wieder my_mention.py. Fügen Sie dem Skript Folgendes hinzu:
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 #Befehl alle 30 Minuten ausführen
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 #Führen Sie den Befehl curl aus, um den Inhalt abzurufen. Überspringen, da bei der ersten Ausführung kein Diff-Ziel vorhanden ist
16 subprocess.call(curl_cmd, shell=True)
17 if file_number == 1:
18 file_number += 1
19 continue
20
21 #Überprüfen Sie das Ergebnis von diff. Diff den Rückkehrcode_Im Ergebnis speichern
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('Die Switch-Seite wurde aktualisiert!Dringende Bestätigung! https://store.nintendo.co.jp/customize.html %s' % (admin))
33 break
34 except subprocess.CalledProcessError as e:
35 print("Ausnahme args:", e.args)
Ich verwende die Unterprozessbibliothek, um die Shell in Python auszuführen, aber es fiel mir schwer, herauszufinden, wie ich den Rückkehrcode empfangen und verarbeiten kann. Wenn es sich um eine Shell handelt, kann nach Ausgabe des Befehls diff, wenn es keinen Unterschied zu echo $? Gibt, 0 erhalten werden, und wenn dies der Fall ist, kann 1 erhalten werden ...
[root@target slackbot]# echo $?
0
[root@target slackbot]#
Immerhin ist es wie folgt implementiert
subprocess.call(diff_cmd, shell=True, stderr=subprocess.STDOUT ,timeout=3, universal_newlines=True)
In Bezug auf das offizielle Dokument gab es eine Beschreibung wie folgt
stdout 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. Wenn der Prozess mit stderr = subprocess.STDOUT ausgeführt wurde, enthält dieses Attribut eine Mischung aus Standard- und Standardfehlerausgaben, und stderr ist None. https://docs.python.jp/3/library/subprocess.html
Dieses Mal wird das empfangene Ergebnis in einer Variablen namens diff_result gespeichert. Wenn es keinen Unterschied gibt, wird es mit continue wiederholt, die Datei vor 3 Generationen wird gelöscht, und wenn es einen Unterschied gibt = das heißt, wenn die Seite aktualisiert wird, wird sie durch Slack benachrichtigt. ich habe es gemacht
Es scheint jedoch, dass ich es vorerst nicht kaufen kann ...
Ich denke, dass ich abgelehnt werde, wenn ich jede Minute zugreife oder etwas mit einem geringen Grad an Leuten mache, also ist es absolut NG. Der gesunde Menschenverstand ist wichtig ...
Automatische JIRA-Ticketerstellung mit Slack-Bot ~ Slack-Bot-Entwicklung mit Python ① ~ JIRA-Ticket mit Slack-Bot → Automatisierung der Slack-Benachrichtigung ~ Slack-Bot-Entwicklung mit Python② ~ Benachrichtigen Sie Slack, wenn die Switch-Verkaufsseite aktualisiert wird ~ Slack-Bot-Entwicklung mit Python ③ ~ [Lassen Sie sich vom Bot das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitteilen, die von Yahoo bereitgestellt wird.
Recommended Posts