[PYTHON] Derrière le bot d'arrivée Ringfit Adventure pour éradiquer les revendeurs

2020/01/11

Bot d'arrivée Ringfit Adventure a été gelé et a été renouvelé. Nous nous réjouissons de votre soutien continu de Price Arrival Dolphin @ Ringfit Adventure.

Aperçu

Avertir quand Ringfit Adventure arrive sur Amazon à un prix fixe Bot d'arrivée Ringfit Adventure J'ai fait. Je vais vous présenter l'arrière de ce bot. Éradiquez les revendeurs.

Image from iOS.jpeg

Contexte

Ring Fit Adventure est très populaire. Il est rare depuis sa sortie. Cette pénurie est due aux achats en gros destinés à la revente par les revendeurs. En fait, il existe des centaines de reventes sur Amazon à des prix (environ 12000 yens) qui dépassent largement le prix catalogue (8778 yens).

Afin d'acheter à un prix fixe sans perdre face aux revendeurs, il est nécessaire de se présenter le plus tôt possible après l'arrivée. J'ai donc décidé de créer une fonction pour notifier l'arrivée des ajustements de bague à un prix fixe. Tout d'abord, je l'ai fait dans le but d'obtenir un ajustement de bague.

Par contre, je pensais aussi qu'en exposant cette fonction, il serait possible d'éradiquer les revendeurs. Il est difficile d'éliminer l'existence de revendeurs. Cependant, avec cette fonctionnalité, vous pouvez surmonter la situation où vous devez acheter auprès d'un revendeur. En offrant un lieu où les acheteurs généraux peuvent se battre au même titre que les revendeurs, nous avons pensé qu'il ne serait pas nécessaire d'acheter auprès de revendeurs, et par conséquent, cela conduirait à l'éradication des revendeurs.

Père Noël qui veut donner une bague digne des cadeaux de Noël Les enfants qui veulent attraper un bal du nouvel an et acheter un anneau. Je me bats avec la puissance de l'informatique.

Éradiquez les revendeurs.

Objectif

--J'achète une aventure en forme de bague

Configuration du système

Je vais expliquer la configuration du système pour éradiquer les revendeurs.

リングフィットqiita.png

Le programme bot s'exécute sur AWS EC2. EC2 a un script python et un fichier de configuration crontab déployés.

couler

Je vais expliquer le flux pour éradiquer les revendeurs.

Flux de travail système

  1. Chaque minute, cron exécute un script python qui effectue les opérations suivantes:
  2. sélénium → chrome | Accédez à la page produit d'Amazon Ringfit Adventure.
  3. sélénium | Analysez le html get et obtenez le prix de l'ajustement de la bague.
  4. python | Déterminez si le prix de l'ajustement de la bague est le prix catalogue.
  5. sélénium → chrome | Si le prix est fixe, connectez-vous à Twitter et tweetez.

Flux d'utilisation des utilisateurs

  1. Suivez le bot d'arrivée Ringfit Adventure.
  2. Activez les notifications.
  3. Vous recevrez un tweet de notification d'arrivée.
  4. Accédez à amazon dès que possible et cliquez sur la coupe de la bague avec un prix catalogue de 8778 yens.
  5. Vous recevrez une bague ajustée dans quelques jours.

Code source

Présentation du code source pour éradiquer les revendeurs.

python & selenium & chrome

amazon.py


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import json
import urllib.request
import datetime
import pytz

#URL de la page produit Ringfit
url = 'https://www.amazon.co.jp/%E4%BB%BB%E5%A4%A9%E5%A0%82-%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%95%E3%82%A3%E3%83%83%E3%83%88-%E3%82%A2%E3%83%89%E3%83%99%E3%83%B3%E3%83%81%E3%83%A3%E3%83%BC-Switch/dp/B07XV8VSZT/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E3%83%AA%E3%83%B3%E3%82%B0%E3%83%95%E3%82%A3%E3%83%83%E3%83%88&qid=1575977457&sr=8-1'

#Lancez Chrome à partir du sélénium et accédez à la page du produit Ring Fit
options = webdriver.ChromeOptions()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get(url)

#Fonction pour tweeter
def tweet(message):
    #compte Twitter
    account = 'ringfit_hoshii'
    password = 'hogehoge'
    #démarrer le sélénium
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    driver = webdriver.Chrome(options=options)
    driver.set_window_size(height=877, width=1440)
    #Ouvrir la page de connexion
    driver.get('https://twitter.com/login/')
    time.sleep(3)  #Arrête de travailler
    #Entrez votre compte
    element_account = driver.find_element_by_class_name("js-username-field")
    element_account.send_keys(account)
    #Entrer le mot de passe
    element_pass = driver.find_element_by_class_name("js-password-field")
    element_pass.send_keys(password)
    #Cliquez sur le bouton de connexion
    element_login = driver.find_element_by_xpath('//*[@id="page-container"]/div/div[1]/form/div[2]/button')
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    element_login.click()
    #Tweet
    time.sleep(3)
    driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/div[2]/div[1]/div/div/div[2]/div[1]/div/div/div/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/div/div/div/div').send_keys(message)
    # time.sleep(1)
    driver.find_element_by_xpath('//*[@id="react-root"]/div/div/div/main/div/div/div/div[1]/div/div[2]/div[2]/div[1]/div/div/div[2]/div[2]/div/div/div[2]/div[3]').click()
    #Dormez pour attendre la fin du tweet
    time.sleep(2)
    driver.quit()
    return

#Fonction permettant d'obtenir un jugement sur le prix et le prix à partir de la page de produit Ring Fit d'Amazon
def get_price(xpath):
    price1 = driver.find_element_by_xpath(xpath)
    p1str = price1.text[1:]
    p1int = int(p1str.replace(',',''))
    now = datetime.datetime.now(pytz.timezone('Asia/Tokyo'))
    message2 = "[En stock] Ring Fit Adventure" + str(p1int) + "Vendu en yens!" + " Amazon URL: " + url + " datetime: " + str(now)
    #Jugement de prix de liste
    if p1int > 9000 or p1int < 5000:
        return
    tweet(message2)
    return

#Il existe plusieurs modèles d'apparence xpath sur la page du produit Ringfit, alors essayez d'obtenir le prix de ces modèles.
xpaths = [
'//*[@id="unqualifiedBuyBox"]/div/div[1]/span',
'//*[@id="priceblock_ourprice"]'
]
for xpath in xpaths:
    get_price(xpath)

driver.quit()

Pour exécuter des tweets sur le sélénium, je me suis référé à ici. L'élément a été acquis par xpath par la même méthode que ici.

crontab

cron.conf


#Le driver chrome référencé par le sélénium/home/ec2-user/Puisqu'il est dans la corbeille, ajoutez-le au chemin
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ec2-user/.local/bin:/home/ec2-user/bin
#Exécutez un script python toutes les minutes
* * * * * python3 /home/ec2-user/ringfit/amazon.py

Configuration initiale et déploiement

Décrit les paramètres du serveur et les déploiements pour éradiquer les revendeurs.

Paramètres initiaux du serveur (EC2)


#Téléchargez et installez les ressources requises
sudo yum -y update
sudo yum -y install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
#Téléchargez le pilote de la version Chrome.
#Commande de confirmation de version
# yum info google-chrome-stable
wget https://chromedriver.storage.googleapis.com/78.0.3904.105/chromedriver_linux64.zip
unzip chromedriver_linux64.zip -d bin/
sudo yum -y install python3
sudo pip3 install Selenium
sudo pip3 install pytz
sudo yum -y install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

Déployer

Déployez ʻamazon.pyetcron.conf(omis). Ici, on suppose que vous avez déployé sur/ home / ec2-user / ringfit`.

paramètres cron


#Destination de déploiement
deploy_dir="/home/ec2-user/ringfit"

#paramètres crontab (après la réinitialisation de cron.conf est en cours de lecture)
crontab -r
crontab -u ec2-user ${deploy_dir}/cron.conf

mouvement

Vous recevrez un tweet comme celui-ci toutes les minutes lors de votre arrivée.

スクリーンショット 2019-12-24 0.24.27.png

Q&A

Pourquoi via le sélénium?

Amazon Puisqu'il est joué lors de l'accès à partir de la commande curl ou de python, j'ai commencé chrome avec du sélénium et j'ai pris la méthode d'accès avec la même procédure qu'un utilisateur général.

twitter J'ai un compte de développeur Twitter, mais pour une raison quelconque, je n'avais pas l'autorisation de créer une application. Il y avait une description que je pouvais enregistrer un numéro de téléphone dans mon compte Twitter, mais pour une raison quelconque, je n'ai pas pu enregistrer mon numéro de téléphone ... Abandonnez et lancez le chrome avec du sélénium, ce qui suit est abrégé.

Est-ce une fonction utile pour les revendeurs?

C'est vrai. Cependant, je pense que les revendeurs ont une telle fonction à eux seuls. L'importance de ce bot est de permettre aux acheteurs généraux de se tenir au même titre que les revendeurs.

Points d'amélioration

―― L'acquisition de prix d'Amazon est vraiment adaptée à xpath, alors j'aimerais penser à une méthode plus robuste. ――Le coût d'EC2 étant élevé, je voudrais passer à Lambda, qui peut être exploité dans le cadre du niveau gratuit.

Intention réelle

――Je souhaite gagner un revenu en faisant du lien attaché au tweet un lien d'affiliation. Au moins à propos des frais AWS ... «Je pensais que j'irais environ 1000 abonnés en un rien de temps. Annoncé sur plusieurs comptes et facebook. J'ai cherché "Ring fit not for sale" et "I want ring fit" et je l'ai ouvert avec des likes manuels tous les jours. En conséquence, il n'augmente pas. Je ne vais pas 50. Cela n'augmente pas du tout. Pourquoi? Si vous pouvez acheter un ajustement de bague, vous ne serez plus suivi car le bot est déjà obsolète. L'ennui de la notification une fois par minute augmente. D'un autre côté, je suis heureux que les utilisateurs achètent correctement RingFit, mais je suis loin de l'objectif de fournir cette fonctionnalité à de nombreuses personnes et d'éradiquer les revendeurs. Afin d'augmenter les abonnés, nous avons également pris en compte les annonces de produits autres que l'ajustement de la bague, mais par exemple, ce n'est pas parce que vous voulez un ajustement de bague que vous voulez des AirPods, et je pense que les annonces de produits qui ne vous intéressent pas ne seront que du bruit. J'ai fait.

en conclusion

Jusqu'à la fin Merci d'avoir lu. C'était le premier message Qiita. Je vais continuer à écrire des articles (un peu plus sérieusement), donc j'ai hâte de travailler avec vous.

Si vous n'avez pas encore le Ringfit Adventure, veuillez l'utiliser si vous le souhaitez ↓ Bot d'arrivée Ringfit Adventure

Aventure en forme d'anneau que vous pourriez acheter à prix fixe ↓ EL6HPVZVAAAN7zX.jpeg

Voix de gratitude ↓ Image from iOS (1).jpeg

Recommended Posts

Derrière le bot d'arrivée Ringfit Adventure pour éradiquer les revendeurs
L'histoire de vouloir acheter une aventure en forme de bague
Enregistrez votre aventure Ringfit avec OCR