Benachrichtigen Sie Slack, wenn die Switch-Verkaufsseite aktualisiert wird ~ Slack-Bot-Entwicklung mit Python ③ ~

Was ist in diesem Artikel zu tun?

Stellen Sie sicher, dass Slack benachrichtigt wird, wenn die Switch-Verkaufsseite wie folgt aktualisiert wird

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

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.

Methode

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:

Programm (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     #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)

Wo ich es schwer hatte

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

Beziehung

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

Benachrichtigen Sie Slack, wenn die Switch-Verkaufsseite aktualisiert wird ~ Slack-Bot-Entwicklung mit Python ③ ~
JIRA Ticket automatische Erstellung mit Slack Bot ~ Slack Bot Entwicklung mit Python ① ~
Schreiben Sie ein Skript in Shell und Python, um Sie in Slack zu benachrichtigen, wenn der Vorgang abgeschlossen ist
Benachrichtigen Sie Slack, wenn der Linux-Befehl beendet ist
Benachrichtigen Sie mit Notification Center, wenn die Ausführungsumgebung in Python macOS ist
python So benachrichtigen Sie automatisch per Telefon, wenn das System ausfällt
Benachrichtigen Sie Slack, wenn der auf GCP ausgeführte maschinelle Lernprozess abgeschlossen ist
Wenn das von rsyslog erfasste Protokoll nach der Drehung mit logrotate nicht aktualisiert wird
Die Abfrage [Webentwicklung mit Python] wird ebenfalls umgeleitet
[Webentwicklung mit Python] Vorsichtsmaßnahmen beim Speichern von Cookies
Bitten Sie den Bot, Ihnen das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitzuteilen, die von Yahoo ~ Slack Bot Development mit Python ④ ~ bereitgestellt wird
[Python Data Frame] Wenn der Wert leer ist, füllen Sie ihn mit dem Wert einer anderen Spalte.
[Einführung in Python] Was ist das wichtige "if __name__ == '__ main__':" beim Umgang mit Modulen?
Electron ist die beste Lösung für die plattformübergreifende Entwicklung von Python
Lesen und Schreiben von Dateien mit Slackbot ~ Bot-Entwicklung mit Python ~
Überprüfen Sie, wann die Version nicht in pyenv wechselt
Verwenden Sie AWS Lambda, um einen Mechanismus zu erstellen, der Slack benachrichtigt, wenn der von CloudWatch überwachte Wert in Python überschritten wird
Slack-Benachrichtigung, wenn ein bestimmtes Wort auf Twitter mit Heroku mit Python gemurmelt wird
Die Geschichte der Implementierung des Themas Facebook Messenger Bot mit Python
Vereinheitlichen Sie die Umgebung des Python-Entwicklungsteams, beginnend mit Poetry
Ein Memo, wenn mit Python + OpenCV schnell ein Gesicht erkannt wird
[Teil 2] Crawlen mit Python! Klicken Sie auf die Webseite, um sich zu bewegen!
Erstellen Sie einen Twitter-BOT mit dem GoogleAppEngine SDK für Python
So gelangen Sie mit Vagrant in die Python-Entwicklungsumgebung
[Python x Zapier] Erhalten Sie Warninformationen und benachrichtigen Sie mit Slack
Holen Sie sich die Quelle der Seite unbegrenzt mit Python zu laden.
So gehen Sie mit dem Problem um, dass das aktuelle Verzeichnis verschoben wird, wenn Python von Atom ausgeführt wird
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt