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