ニンテンドースイッチの入荷をGmailで教えてくれるbotを作ってみた。(Python スクレイピング)*無料
はじめに
商品の入荷情報を自動でメールに送ってくれるツールを作りました。最後に、コードを晒していますので、簡単な環境構築とコピペでツールが出来るようになっています!
入荷情報を知りたい商品を選ぶ
今回は、ヤマダ電機さんのニンテンドースイッチ。すぐ売り切れると噂で聞きますよね…。このツールで、業者より早く買えるようになりましょう😂
必要な環境設定
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"と検索すれば、出てきます。
在庫キーワードの設定
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)
キーワードを取得するときは、デベロッパーツールから探すことができます。
自動で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)
処理結果
在庫が復活したら、すぐにこのようなメールがきます。
さいごに
商品の入荷を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)
この記事が気に入ったらサポートをしてみませんか?