見出し画像

ニンテンドースイッチの入荷をGmailで教えてくれるbotを作ってみた。(Python スクレイピング)*無料

はじめに

 商品の入荷情報を自動でメールに送ってくれるツールを作りました。最後に、コードを晒していますので、簡単な環境構築とコピペでツールが出来るようになっています!

入荷情報を知りたい商品を選ぶ

今回は、ヤマダ電機さんのニンテンドースイッチ。すぐ売り切れると噂で聞きますよね…。このツールで、業者より早く買えるようになりましょう😂

スクリーンショット 2020-04-04 18.00.01

必要な環境設定

import requests
from bs4 import BeautifulSoup
import time
import smtplib


#買いたい商品のURLをコピペ
URL = "https://item.rakuten.co.jp/yamada-denki/1178230015/?s-id=ph_pc_itemname"

#どの端末から閲覧してるか知らせる
HEADERS = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}

#↓のキーワードで入荷するか判断する。*今回は楽天市場
STOCK_WORD = '商品をかごに追加'

HEADERSの情報は、Google検索で"My user agent"と検索すれば、出てきます。

スクリーンショット 2020-04-04 18.12.13

在庫キーワードの設定

def new_stock ():
#キーワードが一致すれば、メール送信される
 active = find_Detail()
 if active==STOCK_WORD:
   print('入荷')
   sendMail()
 else:
   print('在庫なし')

商品ページの情報を取得する

def find_Detail():

 #URLをリクエストして、HTMLを取得する
 page = requests.get(URL, headers=HEADERS)

 #BeautifulSoupのオブジェクトを作る
 soup = BeautifulSoup(page.text,'html.parser')

 #ページに含まれるキーワードを取得
 try:
   active = soup.find(class_='normal').get_text()
 except:
   active = ''
 return(active)

キーワードを取得するときは、デベロッパーツールから探すことができます。

スクリーンショット 2020-04-04 19.11.08

自動でgmailを送る設定をする

def sendMail():

 #gmailのログイン情報を入れる
 account = "×××" 
 password = "×××"
 #件名を入力
 subject = 'New stock!!'
 #メールの内容を入力。*\n\n改行しないと反映されない
 TEXT = "subject:"+subject+'\n\n'+URL
 
 #gmailに接続
 server = smtplib.SMTP("smtp.gmail.com", port= 587)
 server.ehlo()
 server.starttls()
 server.login(account, password)
 #メールの送信
 server.sendmail(account, account, TEXT)
  

該当のファイルの処理を実行

if __name__ == "__main__":
 #60秒毎にサイトにアクセスする。
  while True:
   new_stock ()
   time.sleep(60)

処理結果

在庫が復活したら、すぐにこのようなメールがきます。

スクリーンショット 2020-04-04 19.15.44

さいごに

商品の入荷をGmailで知らせてくれるBotを作りました。今回は、楽天市場を例に出しましたが、アクセスの制限のないサイトでしたら、応用が出来ます。ある程度のHTMLの知識さえあれば、アレンジできるので、参考にしていただけたら嬉しいです😉

  
import requests
from bs4 import BeautifulSoup
import time
import smtplib


URL = "https://item.rakuten.co.jp/yamada-denki/1178230015/?s-id=ph_pc_itemname"

HEADERS = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36"}
STOCK_WORD = '商品をかごに追加'


def new_stock ():
 active = find_Detail()
 if active==STOCK_WORD:
   print('入荷')
   sendMail()
 else:
   print('在庫なし')
 


def find_Detail():
 page = requests.get(URL, headers=HEADERS)
 soup = BeautifulSoup(page.text,'html.parser')
 try:
   active = soup.find(class_='normal').get_text()
 except:
   active = ''
 return(active)
 
def sendMail():
 account = "×××"
 password = "×××"
 subject = 'New stock!!'
 TEXT = "subject:"+subject+'\n\n'+URL

 server = smtplib.SMTP("smtp.gmail.com", port= 587)
 server.ehlo()
 server.starttls()
 server.login(account, password)
 server.sendmail(account, account, TEXT)
  

if __name__ == "__main__":
  while True:
   new_stock ()
   time.sleep(60)




この記事が気に入ったらサポートをしてみませんか?