[PYTHON] L'histoire de vouloir acheter une aventure en forme de bague

Contexte

Faites-vous tous de l'exercice? Ring Fit Adventure, qui est parfait pour le retrait, a récemment été publié par Nintendo! !! Je voulais aussi l'acheter, mais il semble être en rupture de stock et c'est douloureux. Cela dit, je suis ennuyé d'acheter à un prix élevé auprès de revendeurs chez Mercari ou Yafuoku, alors j'ai fait de mon mieux pour l'acheter par la voie régulière.

Ce que j'ai fait

Lorsque je recherchais diverses choses sur Google, j'entendais de temps en temps que les produits étaient reçus et que le stock était rétabli. Cependant, je ne peux pas rester tout le temps devant le site d'achat en ligne, alors je me demandais si je pouvais m'informer lorsque le stock aurait été restauré. Par conséquent, en utilisant ce type de site pratique, j'ai fait une application qui vous avertit par Line si le stock est restauré ici.

Cliquez ici pour les livrables! https://github.com/aitaro/inventory-notification

En passant, si vous modifiez le code article, vous pouvez l'utiliser avec d'autres produits.

Environnement

Pour être honnête, n'importe quelle langue convient. Personnellement, j'aime Ruby, mais j'ai choisi Python. Le développement se fait localement, mais en raison de la nature de la notification d'inventaire, développons avec l'idée de déployer quelque part.

Structure des dossiers

.
├── README.md
├── main.py
└── requirements.txt

requirements.txt


line-bot-sdk
selenium
chromedriver-binary

la mise en oeuvre

Il y a essentiellement deux étapes.

  1. Grattage depuis net-zaiko.com
  2. Envoyer en ligne

Déployez-le sur un serveur approprié. (Cette fois heroku)

Il existe deux façons de gratter, l'une consiste à utiliser du sélénium et l'autre à utiliser beautifulsoup4, mais puisque ce site est accédé et que les informations d'inventaire des autres sites sont récupérées, le sélénium qui reproduit le comportement du navigateur tel qu'il est utilisé. De plus, line crée un bot à partir de ici et émet un jeton d'accès. «GOOGLE_CHROME_SHIM» dans le code est l'emplacement de l'exécutable chrome.

main.py


from linebot import LineBotApi
from linebot.models import TextSendMessage
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary
import re
import time
import os

#Acquisition d'informations sur les stocks

#Aventure en forme d'anneau
item_id = '4902370543278'
# item_id = '4988013097025'

#Lancez le navigateur
options = Options()
options.binary_location = os.getenv('GOOGLE_CHROME_SHIM')
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)

# net-Accéder à zaiko
url = 'https://www.net-zaiko.com/item/' + item_id
driver.get(url)
time.sleep(10)
targetElements = driver.find_elements_by_css_selector("#sl0 .siSa,.siSb,.siSc,.siSd,.siSe")
title = driver.find_element_by_id("itmH0").text

#Vérifiez s'il y a du stock dans chaque boutique en ligne
flag = False
for el in targetElements:
    #Exclure amazon car il crée du maquillage
    pattern = r'Amazon\.co\.jp'
    result = re.search(pattern, el.text)
    if not result:
        flag = True
        print('En stock')
    print(el.text)
    print(title)

#Quittez le navigateur
driver.quit()


#Notifier la ligne

line_bot_api = LineBotApi(os.getenv('LINE_CHANNEL_ACCESS_TOKEN'))

if flag:
    messages = TextSendMessage(text=f"{title}Nous avons le produit en stock!\n Veuillez accéder à partir d'ici{url}")
    line_bot_api.broadcast(messages=messages)

Ingéniosité

Déployer

Puisque le chrome était inclus et qu'il était nécessaire de pouvoir l'exécuter régulièrement, j'ai examiné diverses choses dans cette condition, mais comme il semblait que heroku pouvait être gratuit, j'ai choisi heroku. Je vais omettre comment le faire dans l'application avec heroku, mais vous pouvez mettre le planificateur heroku avec un module complémentaire et mettre chrome et chromedrive avec buildpack. Voir Ici.

Impressions

Je l'ai fait en environ 2 heures. Je ne peux pas encore l'acheter. Je le veux bientôt. Le grattage doit être fait tant que cela ne vous dérange pas.

Recommended Posts

L'histoire de vouloir acheter une aventure en forme de bague
Derrière le bot d'arrivée Ringfit Adventure pour éradiquer les revendeurs
L'histoire d'essayer de reconnecter le client
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
L'histoire du changement de pep8 en pycodestyle
L'histoire de vouloir acheter une aventure en forme de bague
Derrière le bot d'arrivée Ringfit Adventure pour éradiquer les revendeurs
Histoire de passer de Pipenv à la poésie
L'histoire de sys.path.append ()
L'histoire de l'utilisation de Circleci pour construire des roues Manylinux
L'histoire de la construction de Zabbix 4.4
L'histoire de l'introduction de Jedi (package de complétion automatique de python) dans emacs
L'histoire de la copie de données de S3 vers TeamDrive de Google
Après tout, l'histoire du retour de Linux à Windows
Je suis à Singapour en ce moment Une histoire sur la création d'un LineBot et la volonté de faire un travail mémorable
L'histoire selon laquelle la version de python 3.7.7 n'était pas adaptée à Heroku
L'histoire de Python et l'histoire de NaN
L'histoire de ne pas pouvoir exécuter pygame avec pycharm
L'histoire de la participation à AtCoder
Tester l'adéquation de la distribution
L'histoire du "trou" dans le fichier
[Pythonista] L'histoire de la réalisation d'une action pour copier le texte sélectionné
L'histoire du remontage du serveur d'application
Supplément à l'explication de vscode
L'histoire de l'exportation d'un programme
L'histoire de l'échec de la mise à jour de "calendar.day_abbr" sur l'écran d'administration de django
zoom J'ai essayé de quantifier le degré d'excitation de l'histoire lors de la conférence
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
L'histoire de la tentative de pousser SSH_AUTH_SOCK obsolète avec LD_PRELOAD à l'écran
L'histoire d'une erreur dans PyOCR
Script pour changer la description de fasta
10 méthodes pour améliorer la précision de BERT
Comment vérifier la version de Django
L'histoire de la fabrication d'un moule immuable
L'histoire de la manipulation des variables globales Python
L'histoire d'essayer deep3d et de perdre
L'histoire du traitement A du blackjack (python)
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
L'histoire du passage du système Web Azure App Service de Windows à Linux
L'histoire de la fabrication de soracom_exporter (j'ai essayé de surveiller SORACOM Air avec Prometheus)
L'histoire d'un technicien de haut niveau essayant de prédire la survie du Titanic
Comment calculer la volatilité d'une marque
L'histoire de l'apprentissage profond avec TPU
Comment trouver la zone du diagramme de Boronoi
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Trouver la main de "Millijan" par l'optimisation des combinaisons
Paramètre pour afficher le journal de l'exécution de cron
L'inexactitude de Tensorflow était due à log (0)
L'histoire de la création du Mel Icon Generator version 2
J'ai essayé de corriger la forme trapézoïdale de l'image
Modifiez le point décimal de la journalisation de, à.
Traitement d'image? L'histoire du démarrage de Python pour
L'histoire de la recherche du n optimal dans N poing
Histoire d'essayer d'utiliser Tensorboard avec Pytorch