[PYTHON] Ich habe ein Programm erstellt, um Sie per LINE zu benachrichtigen, wenn Schalter eintreffen

Ich habe ein Programm erstellt, um per LINE zu benachrichtigen, wenn ein schwer zu beschaffender Schalter (?) Eintrifft. Hier sind Joshin und Amazon ins Visier genommen.

Umgebung

Dinge notwendig

--LINE Entwicklerkonto

Vorbereitung

Zuerst,

pip install requests
pip install beautifulsoup4
pip install line-bot-sdk

Und legen Sie die erforderlichen Bibliotheken. Wenn Sie es mit Raspberry pi machen, erhalten Sie möglicherweise eine Fehlermeldung, wenn Sie zu Beginn kein "sudo" schreiben.

Bereiten Sie als Nächstes ein LINE-Entwicklerkonto vor. Wie es gemacht wird, wird unten ausführlich beschrieben. Eine Geschichte über das Erstellen eines Systems, das IP benachrichtigt, wenn Raspi Linebot verwendet

Was wir hier wollen, ist "Channel Access Token" und "Ihre Benutzer-ID". Kopieren Sie diese und fügen Sie sie im folgenden Programm in LINE_ACCESS_TOKEN und LINE_USER_ID ein.

Programm

zaikochecker.py


# coding: UTF-8
import re
import requests
from bs4 import BeautifulSoup
from linebot import LineBotApi
from linebot.models import TextSendMessage
from linebot.exceptions import LineBotApiError

LINE_ACCESS_TOKEN = "Fügen Sie das LINE-Zugriffstoken ein"
LINE_USER_ID = "Fügen Sie die LINE-Benutzer-ID ein"
line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)

#Zur UA-Tarnung
my_header = {
    "User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; rv:11.0) like Gecko"
}

#Produkt-URL
joshin_url = [
    ""
]

amazon_url = [
    ""
]

#Zeichenfolge zum Zeitpunkt der LINE-Benachrichtigung
result_str = ""

#Für Joshin
result_str = "Joshin\n"
for i in range(len(joshin_url)):
    data = requests.get(joshin_url[i], headers = my_header)
    data.encoding = data.apparent_encoding
    data = data.text
    soup = BeautifulSoup(data, "html.parser")
    try:
        detail = soup.find("form",{"name":"cart_button"}).text.encode("UTF-8")
        print(detail) #debuggen
        if ("Verkauf" in detail) == False: # Verkauf休止中ですとなっていなければ在庫あり
            if(i == 0) : result_str += "Neon auf Lager\n"
            if(i == 1) : result_str += "Grau auf Lager\n"
    except AttributeError:
            print("Error")

#LINE-Benachrichtigung für Joshin
if result_str != "Joshin\n":
    try:
        line_bot_api.push_message(LINE_USER_ID, TextSendMessage(text=result_str))
    except LineBotApiError as e:
        print(e)

#Für Amazon
result_str = "Amazon\n"
for i in range(len(amazon_url)):
    data = requests.get(amazon_url[i], headers = my_header)
    data.encoding = data.apparent_encoding
    data = data.text
    soup = BeautifulSoup(data, "html.parser")
    detail = soup.find("div",id="merchant-info").find("a").text
    print(detail) #debuggen
    if ("Amazon" in detail) == True: # Amazon.co.Auf Lager, wenn jp zum Verkauf steht
        if(i == 0) : result_str += "Neon auf Lager\n"
        if(i == 1) : result_str += "Grau auf Lager\n"

#LINE-Benachrichtigungen für Amazon
if result_str != "Amazon\n":
    try:
        line_bot_api.push_message(LINE_USER_ID, TextSendMessage(text=result_str))
    except LineBotApiError as e:
        print(e)

Es kann schwierig sein, ein Programm zu verstehen, da es ineffizient ist, weil es sich um eine Push-and-Pull-Beschreibung handelt. Einfach ausgedrückt, dieses Programm greift auf die URL des Zielprodukts zu und prüft, ob es bereit ist, eine Bestellung aufzugeben.

joshin_url und amazon_url sind ein Array von Produkt-URLs, und die Ziel-URL wird hier beschrieben.

Wenn Sie sich beim Zugriff nicht als UA ausgeben, wird es auf Amazon abgespielt. Der UA-Identitätswechsel wird daher in "my_header" beschrieben.

Wie man Anfrage und schöne Suppe verwendet, wird herauskommen, wenn Sie googeln, also werde ich es weglassen. Wenn es Joshin ist und in "cart_button" eine Zeichenfolge "Nicht verkauft" vorhanden ist, bedeutet dies, dass Sie nicht bestellen können. Mit anderen Worten, wenn die erworbene Zeichenfolge kein Wort "Verkauf" enthält, können Sie bestellen. Der Grund, warum nur Joshin per Versuch verarbeitet wird, ist übrigens, dass die Produktseite nicht richtig angezeigt wird, wenn Sie mit Joshin zu viel zugreifen. (Wird die Bestellschaltfläche nicht angezeigt, wenn innerhalb einer bestimmten Zeit viele Zugriffe von einer bestimmten IP erfolgen?) Wenn es sich um Amazon handelt, wird der Verkäufer in das Tag "Händler-Info" eingetragen. Wenn dies jedoch Amazon.co.jp zum Verkauf ist, wird beurteilt, dass es bestellbereit ist.

Weitere Details zu LINE-Benachrichtigungen finden Sie unten. LINE API Reference Es sollte funktionieren, wenn das richtige Token und die richtige ID eingegeben werden.

Wenn die Benachrichtigung tatsächlich kommt, sieht es so aus. スクリーンショット 2017-03-23 13.41.19.png

Programmausführung

Selbst wenn das obige Programm nur einmal ausgeführt wird, kann nur der Zustand erhalten werden, in dem es ausgeführt wird. Daher ist es notwendig, das Inventar in bestimmten Zeitintervallen zu überprüfen. Hier werden wir cron verwenden, um das Inventar jede Minute zu überprüfen.

Für die Verwendung von Cron habe ich Folgendes erwähnt. [Zu einem festgelegten Zeitpunkt verarbeiten](http://make.bcde.jp/raspberry-pi/%E6%B1%BA%E3%81%BE%E3%81%A3%E3%81%9F%E6% 99% 82% E9% 96% 93% E3% 81% AB% E5% 87% A6% E7% 90% 86% E3% 81% 99% E3% 82% 8B /)

Wenn Sie jede Minute überprüfen

*/1 * * * * python /home/hoge/zaikochecker.py

Es sollte getan werden.

Zusammenfassung

Mit diesem Programm wurde ich tatsächlich benachrichtigt und konnte sicher eine Bestellung aufgeben. Es gibt jedoch einige Probleme. Der erste besteht darin, auf jede Minute zuzugreifen, sodass das Risiko besteht, dass der Server des anderen Teilnehmers überlastet und abgespielt wird. Die zweite besteht darin, jede Minute zu überprüfen. Wenn der Lagerbestand also längere Zeit auf Lager ist, erhalten Sie jede Minute eine LINE-Benachrichtigung.

Ich denke, dass Sie es mit dem gleichen Verfahren machen können, wenn Sie wissen, wie man schöne Suppe auch mit Yodobashi und großen Kameras verwendet.

Recommended Posts

Ich habe ein Programm erstellt, um Sie per LINE zu benachrichtigen, wenn Schalter eintreffen
Ich habe ein System erstellt, mit dem Sie nur durch einen Anruf twittern können
Ich habe Sie dazu gebracht, Befehle über einen WEB-Browser auszuführen
Ich habe versucht, ein Programm zu erstellen, um die Fehlersuche von Saiseriya zu lösen (Hinweis)
Wollen Sie nicht sagen, dass Sie ein Gesichtserkennungsprogramm erstellt haben?
Ich habe einen LINE-Stempel erstellt, in dem Sie Linux-Befehle studieren können
Wenn Sie eine mehrdimensionale Liste nach mehreren Zeilen sortieren möchten
Ich habe ein Skript erstellt, um Piktogramme anzuzeigen
Wenn Sie eine Linie für eine lange Zeit brechen möchten
Wenn Sie eine Spalte spaltenweise durch einen fehlenden Wert (NaN) ersetzen möchten
Ich habe ein Programm erstellt, um einzugeben, was ich gegessen habe, und um Kalorien und Zucker anzuzeigen
Ich habe eine Bibliothek konoha gemacht, die den Tokenizer auf ein schönes Gefühl umstellt
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Ich habe einen Stempelersatzbot mit Linie gemacht
Ich habe versucht, die Blasensortierung nach Sprache zu programmieren
Senden Sie eine Nachricht mit Python an LINE (LINE Notify)
[LINE Messaging API] Ich möchte eine Nachricht vom Programm an alle LINE senden
Ich habe gerade ein Tool erstellt, mit dem Daten mithilfe der GUI-Operation einfach als Diagramm angezeigt werden können
Erstellen eines LINE BOT, um zusätzliche AtCoder-Wettbewerbe mit AWS zu benachrichtigen
Ich habe einen LINE Bot mit Serverless Framework erstellt!
Wie man sich erinnert, wenn man ein Wort vergisst
Ich habe ein Modul in C-Sprache erstellt, das von Python geladene Bilder filtert
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich habe ein Programm erstellt, um Wörter im Fenster nachzuschlagen (vorherige Entwicklung)
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe ein Programm erstellt, um Bilder mit Python und OpenCV in ASCII-Grafik umzuwandeln
Verwenden Sie AWS Lambda + LINE Benachrichtigen, um LINE zu benachrichtigen, dass Sie Ihren Regenschirm nicht vergessen, wenn Sie nach Hause kommen
Ich habe vergessen, VIM zu bedienen, also habe ich ein Video zum Auswendiglernen gemacht. 3 Videos nach Level
[AWS] Ich habe BOT mit LINE WORKS daran erinnert
Ich habe mit LINE Bot ein Haushaltsbuch für Bot erstellt
Ich habe eine Bibliothek erstellt, um japanische Sätze schön zu brechen
Ich habe ein Skript erstellt, um ein Snippet in README.md einzufügen
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe einen Code erstellt, um illustration2vec in ein Keras-Modell zu konvertieren
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
[Valentine Spezialprojekt] Ich habe eine LINE-Kompatibilitätsdiagnose gestellt!
Ich habe einen Befehl zum Markieren des Tabellenclips gegeben
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Wenn Sie in der for-Anweisung plt.save möchten
〇✕ Ich habe ein Spiel gemacht
Ich bin immer ungeduldig, wenn ich ein Café bestelle, also habe ich eine React-App erstellt, um es zu lösen
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Eine Geschichte, die stolperte, als ich mit Transformer einen Chat-Chat-Bot erstellte
Ich möchte die von LINE an S3 gesendeten Fotos speichern
Ich habe versucht, die Zugverspätungsinformationen mit LINE Notify zu benachrichtigen
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
Ich habe schnell ein Programm geschrieben, um DI mit Python zu lernen
Ich habe eine Schachtel gemacht, um mich auszuruhen, bevor Pepper müde wird
Ich habe einen Befehl zum Generieren eines Kommentars für eine Tabelle in Django eingegeben
Ich habe ein Tool erstellt, um eine Wortwolke aus Wikipedia zu erstellen
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen