PR

Macで価格.comの価格を毎日取得し、Gmailで自動通知する完全ガイド

記事内に広告が含まれています。
スポンサーリンク

今、私の使っているWindowsのPCは自作したのですが、作ってから5年程度経過しており、そろそろバージョンアップを考えています。構成については決まったので、あとは価格がいい感じに下がったら購入しようと思っています。ただ、毎日チェックするのが面倒だったので、チェック結果を毎日メールでもらえるようにPythonでコードを書きました。
(価格コムにもリマインダーがあるじゃん、と思ったのですが、暇だったので作りました)

スポンサーリンク

必要なもの

Mac

私はMacは常にインターネットに接続して起動してある状態なので、Macにしました。同じ条件であればWindowsでもできると思います。

Python3

Macであれば標準でインストールされています。Windowsはどうだったっけなぁ。なので、下記をターミナルで試してみればいいと思います。

python3 --version

必要なライブラリのインストール

pip3 install requests beautifulsoup4 yagmail

スクリプトの概要

私のほしい次の4商品の価格を価格.comから取得し、Gmailを使って毎朝9時に送信します。

  • Ryzen 7 7800X3D
  • ASRock B850I Lightning WiFi
  • AX5U6400C3232G-DCLARBK
  • Radeon RX 9070 XT Steel Legend Dark

以下のスクリプトを script.py という名前で、任意のフォルダに保存してください。

import requests
from bs4 import BeautifulSoup
import yagmail
from datetime import datetime
import re

# 価格.comの商品URL
PRODUCTS = {
    "Ryzen 7 7800X3D": "https://kakaku.com/item/K0001507444/",
    "ASRock B850I Lightning WiFi": "https://kakaku.com/item/K0001669879/",
    "AX5U6400C3232G-DCLARBK": "https://kakaku.com/item/K0001579840/",
    "Radeon RX 9070 XT Steel Legend Dark": "https://kakaku.com/item/K0001683328/",
}

def fetch_price(url):
    headers = {
        "User-Agent": "Mozilla/5.0"
    }
    res = requests.get(url, headers=headers)
    soup = BeautifulSoup(res.content, "html.parser")
    price_tag = soup.select_one(".priceTxt")
    if price_tag:
        return price_tag.get_text(strip=True)
    return "価格取得失敗"

def parse_price(price_str):
    """ 文字列から整数を抽出。価格取得失敗時は0を返す """
    match = re.search(r"([\d,]+)", price_str)
    if match:
        return int(match.group(1).replace(",", ""))
    return 0

def main():
    report_lines = []
    total = 0
    for name, url in PRODUCTS.items():
        price_str = fetch_price(url)
        price_val = parse_price(price_str)
        total += price_val
        report_lines.append(f"{name}: {price_str}({url})")
    report_lines.append(f"\n【合計金額】{total:,}円")
    report = "\n".join(report_lines)

    now = datetime.now().strftime("%Y-%m-%d %H:%M")
    subject = f"PCパーツ価格通知({now} 実行)"
    body = f"本日の価格は以下の通りです。\n\n{report}"

    # Gmail設定
    yag = yagmail.SMTP(user="送信元メールアドレス", password="アプリパスワード")
    yag.send(to="送信先メールアドレス", subject=subject, contents=body)

if __name__ == "__main__":
    main()

スクリプト内の user および to の部分は、ご自身のGmailアドレスおよび受信先に置き換えてください。

Gmailのアプリパスワード発行手順(2段階認証が必要)

送信元のGmailのアプリパスワードを取得します。

  1. 送信元のGoogleアカウントにログイン
  2. https://myaccount.google.com/apppasswords
  3. アプリ:適当に入力する(私の場合、PC部品最安値通知、としました)
  4. 表示されたパスワードをコピーして、script.pyのアプリパスワードに貼り付け

ちゃんと通知メールが届くか試してみる

ターミナルで、script.pyが保存されたディレクトリに移動して以下を実行して、送信先メールアドレスにメールが届くか、試してみる。

python3 script.py

Macで毎朝9時にスクリプトを自動実行する(cron設定)

  1. ターミナルでcrontab編集
crontab -e
  1. 以下の1行を追記
0 9 * * * /usr/bin/python3 /Users/あなたのユーザー名/適当なフォルダ/script.py

上記の/usr/bin/python3は、ご自身の環境でのpython3のありかを示す。もしわからなければターミナルでwhich python3で教えてくれます。
/Users/あなたの、、、は「スクリプトの概要」で保存したscript.pyのフルパスを指定すればいいです。

補足

  • Macの蓋が閉じているとcronは動かない場合があります。Macがスリープしないようにしたいなら Amphetamine などのツールがおすすめです。
  • launchd を使うことでGUI操作でもっと確実にスケジュール実行可能ですが、cronの方が手軽です。
  • 価格.comはHTML構造がよく変わるので、取得に失敗することがありえます。その場合も「取得失敗」と表示されます。

コメント

タイトルとURLをコピーしました