⌨️

入荷通知システム

2023/12/14に公開

はじめに

HHKB Studioがすぐに売り切れてしまうので,入荷したら通知をするシステムを作る.
自己責任でお願いします.

概要

楽天市場の商品情報を取得して,商品が入荷されているかを通知する.

開発環境

  • Windows10 home
  • PyCharm Community
  • Python 3.11.6

Slackの機能を利用するための設定

https://qiita.com/vmmhypervisor/items/18c99624a84df8b31008

この方のページを参考にしてWebhook URLを取得した.

モジュールのインストール

pip install schedule
pip install requests
pip install bs4

ソースコード

import json
import re
import ast
import time
import schedule
import requests
from bs4 import BeautifulSoup

ITEM_URL = "https://item.rakuten.co.jp/pfudirect/pd-id120b/" #楽天市場の商品URL
SLACK_URL = "取得したSlackのURL"

is_stock = False

def get_stock(url):
    params = {
        "format": "json",
    }

    res = requests.get(url, params=params)

    if res.status_code != 200:
        res.close()
        return None

    soup = BeautifulSoup(res.text, "html.parser")
    res.close()

    item_info = re.sub(r"^<.*>$", "", soup.find(id="item-page-app-data").getText())
    item_info = json.loads(item_info)
    custom_parameter = ast.literal_eval(item_info["rat"]["customParameter"])

    if custom_parameter["soldout"][0]:
        return False
    return True


def notify():
    global is_stock
    print(is_stock)
    if get_stock(ITEM_URL) and not is_stock:
        send_message = "HHKB Studio在庫あります."
        requests.post(SLACK_URL, data=json.dumps({'text': send_message}))

        is_stock = True
    elif get_stock(ITEM_URL):
        pass
    else:
        is_stock = False


def main():
    schedule.every(5).minutes.do(notify) #ここを変えれば実行間隔を変更できる

    while True:
        try:
            schedule.run_pending()
            time.sleep(1)
        except KeyboardInterrupt:
            return

if __name__ == "__main__":
    main()

Discussion