J'ai créé un programme pour avertir par LINE lorsqu'un commutateur difficile à obtenir (?) Arrive. Ici, Joshin et Amazon sont visés.
--Compte développeur LINE --Machine qui exécute des scripts python
Premier,
pip install requests
pip install beautifulsoup4
pip install line-bot-sdk
Et mettez dans les bibliothèques requises.
Si vous le faites avec Raspberry pi, vous pouvez obtenir une erreur si vous n'écrivez pas sudo
au début.
Ensuite, préparez un compte de développeur LINE. Comment le faire est décrit en détail ci-dessous. Une histoire sur la création d'un système qui notifie ip lorsque raspi commence à utiliser linebot
Ce que nous voulons ici, c'est "Channel Access Token" et "Your user Id". Copiez-les et collez-les dans «LINE_ACCESS_TOKEN» et «LINE_USER_ID» dans le programme ci-dessous.
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 = "Collez le jeton d'accès LINE"
LINE_USER_ID = "Coller l'ID utilisateur LINE"
line_bot_api = LineBotApi(LINE_ACCESS_TOKEN)
#Pour le camouflage UA
my_header = {
"User-Agent" : "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; NP06; rv:11.0) like Gecko"
}
#URL du produit
joshin_url = [
""
]
amazon_url = [
""
]
#Chaîne de caractères au moment de la notification LINE
result_str = ""
#Pour 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) #déboguer
if ("Vente" in detail) == False: # Vente休止中ですとなっていなければ在庫あり
if(i == 0) : result_str += "Néon en stock\n"
if(i == 1) : result_str += "Gris en stock\n"
except AttributeError:
print("Error")
#Notification LINE pour 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)
#Pour 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) #déboguer
if ("Amazon" in detail) == True: # Amazon.co.En stock si jp est à vendre
if(i == 0) : result_str += "Néon en stock\n"
if(i == 1) : result_str += "Gris en stock\n"
#Notifications LINE pour 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)
Ce programme peut être difficile à comprendre car il est inefficace car il s'agit d'une description push-and-pull. En termes simples, ce programme accède à l'URL du produit cible et vérifie s'il est prêt à passer une commande.
joshin_url
et ʻamazon_url` sont un tableau d'URL de produits, et l'URL cible est décrite ici.
Si vous n'empruntez pas l'UA lors de l'accès, il sera lu sur Amazon, donc l'usurpation d'identité UA est décrite dans my_header
.
Comment utiliser la demande et la belle soupe sortira si vous google, donc je vais l'omettre.
Si c'est Joshin, s'il y a une chaîne de caractères "Invendu" dans cart_button
, cela signifie que vous ne pouvez pas commander.
En d'autres termes, s'il n'y a pas de mot «vente» dans la chaîne de caractères acquise, vous pouvez commander.
À propos, la raison pour laquelle seul Joshin est traité par try est que si vous accédez trop avec Joshin, la page du produit ne s'affichera pas correctement.
(Le bouton de commande ne s'affiche-t-il pas s'il y a de nombreux accès depuis une adresse IP spécifique dans un certain temps?)
De plus, s'il s'agit d'Amazon, le vendeur est inscrit dans la balise a de «merchant-info», mais s'il s'agit d'Amazon.co.jp à vendre, il est jugé qu'il est prêt à commander.
Vous trouverez ci-dessous plus de détails sur les notifications LINE. LINE API Reference Cela devrait fonctionner si le jeton et l'ID corrects sont entrés.
Lorsque la notification arrive, cela ressemble à ceci.
Même si le programme ci-dessus n'est exécuté qu'une seule fois, seul l'état lors de son exécution peut être obtenu. Par conséquent, il est nécessaire de vérifier l'inventaire à certains intervalles de temps. Ici, nous utiliserons cron pour vérifier l'inventaire toutes les minutes.
Pour savoir comment utiliser cron, je me suis référé à ce qui suit. [Traiter à une heure fixe](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 /)
Si vous vérifiez toutes les minutes
*/1 * * * * python /home/hoge/zaikochecker.py
Ca devrait être fait.
Avec ce programme, j'ai été effectivement notifié et j'ai pu passer une commande en toute sécurité. Cependant, il y a quelques problèmes. La première consiste à accéder toutes les minutes, il y a donc un risque que le serveur de l'autre partie soit surchargé et joué. La seconde est de vérifier toutes les minutes, donc si le stock est en stock pendant une longue période, vous recevrez une notification LINE toutes les minutes.
Je pense que vous pouvez le faire avec la même procédure si vous savez utiliser une belle soupe même avec des Yodobashi et de gros appareils photo.
Recommended Posts