【Webスクレイピング完結編】Pythonで価格監視ツールを完全自動化!定時実行とDiscord通知を実装しよう 🤖

「値下げを検知するロジックはできたけど、毎日自分でスクリプトを実行するのは面倒…」
「家にいない時でも、商品の値下げ情報をリアルタイムで知りたい!」
「完成したスクリプトを、どうやって24時間365日、自動で動かせばいいの?」

こんにちは! Python自動化探検隊、隊長のPythonistaです! 前回の第2回では、監視対象リストを元に価格を比較し、値下げを検知して通知メッセージを生成するという、価格監視ツールの「頭脳」部分を実装しましたね。

シリーズ最終回となる今回は、ついにこのプロジェクトを**完全自動化**します! この記事のゴールは、

  • 生成した通知メッセージを、Discordに自動で送信する機能の統合。
  • この監視スクリプト全体を、指定した時間にPCが自動で実行するように設定する。

という2つの大きなステップを達成することです。これにより、あなたが寝ている間も、仕事をしている間も、プログラムが健気に働き続け、チャンスを逃さずあなたに知らせてくれる、まさに夢のような「パーソナルショッピングアシスタント」が完成します。さあ、自動化の最後のピースをはめ込みましょう!


1. 準備:これまでのスクリプトとDiscord通知関数

今回は、これまでに作成した2つの重要な「部品」を組み合わせます。

  1. 価格監視スクリプト(第2回で作成): 商品情報をチェックし、値下げメッセージのリストを生成するメインロジック。
  2. Discord通知関数: 以前のDiscord自動通知の記事で作成した、Webhook URLにメッセージを送信するsend_discord_message()関数。

まずは、そのsend_discord_message()関数を、今回のプロジェクトファイルにコピーしておきましょう。

import requests
import json

# ▼▼▼ あなたのDiscord Webhook URLをここに設定 ▼▼▼
DISCORD_WEBHOOK_URL = "ここにあなたのWebhook URLを貼り付けてください"

def send_discord_message(webhook_url, content):
    # ... (以前作成したDiscord通知関数のコードをここに記述) ...
    if not webhook_url or "discord.com/api/webhooks/" not in webhook_url:
        print("エラー: Discord Webhook URLが正しく設定されていません。")
        return
    
    payload = {"content": content}
    headers = {"Content-Type": "application/json"}

    try:
        response = requests.post(webhook_url, data=json.dumps(payload), headers=headers)
        if 200 <= response.status_code < 300:
            print("Discordにメッセージを送信しました。")
        else:
            print(f"Discordへの送信に失敗しました。ステータスコード: {response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"リクエストエラー: {e}")

2. ステップ1:監視ロジックとDiscord通知の統合

それでは、前回のメインスクリプトを改造し、値下げが見つかった場合にprint()で表示するだけでなく、send_discord_message()関数を呼び出してDiscordに通知するようにしましょう。変更はmain関数の最後だけです。

# (load_targets, get_product_info, check_prices関数は前回と同じ)
# (send_discord_message関数も上記で定義済み)

def main():
    target_file = 'targets.csv'
    
    # 1. 監視対象をCSVから読み込む
    targets_to_check = load_targets(target_file)

    if targets_to_check:
        # 2. 価格をチェックし、値下げ商品のメッセージリストを取得
        deal_messages = check_prices(targets_to_check)
        
        # --- ▼▼▼ ここからが変更・追加部分 ▼▼▼ ---
        print("\n--- 監視結果 ---")
        if deal_messages:
            print(f"{len(deal_messages)}件の値下げ商品が見つかりました!Discordに通知します。")
            
            # 見つかった全ての値下げ情報について通知を送る
            for msg in deal_messages:
                send_discord_message(DISCORD_WEBHOOK_URL, msg)
                time.sleep(1) # 連続投稿規制を避けるための短い待機
        else:
            print("今回は値下げされた商品はありませんでした。")
            # (任意) 値下げがなかった場合も通知したいなら、ここにsend_discord_message()を追加
            # send_discord_message(DISCORD_WEBHOOK_URL, "価格監視完了。値下げ商品はありませんでした。")
        # --- ▲▲▲ ここまでが変更・追加部分 ▲▲▲ ---

if __name__ == '__main__':
    main()

これで、スクリプトを実行して値下げが見つかると、あなたのDiscordチャンネルに自動で通知が届くようになりました!


3. ステップ2:スクリプトの定期実行 - 完全自動化へ

通知機能はできましたが、まだ自分でスクリプトを実行する必要があります。これをOSの機能を使って、毎日決まった時間に自動で実行されるように設定しましょう。

重要: 定期実行を設定する場合、スクリプトやCSVファイルは、デスクトップなどの一時的な場所ではなく、ドキュメントフォルダ内などに専用のプロジェクトフォルダを作成して、そこにまとめて配置してください。

3.1. Linux (Ubuntu, Raspberry Piなど) の場合:cronを使う

cron(クロン)は、Linuxに標準で備わっている、ジョブを定期的に実行するためのスケジューラです。

  1. ターミナルでcrontab -eと入力し、スケジュール設定ファイルを開きます。(初回はエディタの選択を求められるかもしれません。nanoがおすすめです。)
  2. ファイルの末尾に、以下のような行を追加します。
    # 毎日午前9時30分に、price_checker.pyスクリプトを実行する例
    30 9 * * * /usr/bin/python3 /home/your_username/my_project/price_checker.py >> /home/your_username/my_project/cron.log 2>&1
            
  3. ファイルを保存して閉じます。

設定の解説:

  • 30 9 * * *: 「分 時 日 月 曜日」の順で指定します。*は「毎〜」を意味します。つまり「毎日毎月毎曜日、9時30分」に実行、ということです。
  • /usr/bin/python3: Pythonの実行ファイルの**フルパス**。which python3コマンドで確認できます。
  • /home/your_username/my_project/price_checker.py: 実行したいPythonスクリプトの**フルパス**。
  • >> ... cron.log 2>&1: スクリプトの実行結果(print文など)やエラーを、cron.logというファイルに追記するための記述です。これがないと、どこで問題が起きたか分からなくなるので、設定しておくことを強く推奨します。

3.2. Windowsの場合:タスク スケジューラを使う

Windowsには、GUIで定期実行を設定できる「タスク スケジューラ」が標準で備わっています。

  1. Windowsの検索バーで「タスク スケジューラ」と検索して起動します。
  2. 右側の操作パネルから「基本タスクの作成...」をクリックします。
  3. ウィザードに従って、タスクの名前(例: 「価格監視スクリプト」)と説明を入力します。
  4. 「トリガー」で、実行したい頻度(例: 「毎日」)と開始時刻(例: 「9:30:00」)を設定します。
  5. 「操作」で、「プログラムの開始」を選択します。
  6. 「プログラム/スクリプト」の欄に、あなたのPython実行ファイル(python.exe)の**フルパス**を入力します。(例: C:\Users\YourName\anaconda3\python.exe
  7. 【重要】「引数の追加 (オプション)」の欄に、実行したいスクリプトの**フルパス**を入力します。(例: D:\my_project\price_checker.py
  8. 【重要】「開始 (オプション)」の欄に、スクリプトが保存されている**フォルダのパス**を入力します。(例: D:\my_project)これを設定しないと、スクリプトがtargets.csvを見つけられずエラーになることがあります。
  9. 最後に「完了」をクリックして、タスクを作成します。

これで、あなたのPCは毎日決まった時間に自動で価格をチェックし、値下げがあればあなたにDiscordで知らせてくれる、賢いアシスタントになりました!


まとめ:Webスクレイピングプロジェクト、堂々完結!

3回にわたるWebスクレイピングプロジェクト、お疲れ様でした!このシリーズを通して、私たちは以下の壮大な旅をしました。

  • 第1回: Webページから情報を抽出する「目」を手に入れた。
  • 第2回: 価格を比較し、判断を下す「頭脳」を実装した。
  • そして今回: Discordに通知する「声」と、定時実行する「心臓」を与え、ツールを完全に自律させた。

単なるスクリプトが、外部サービスと連携し、OSの機能によって自動で動き続ける「システム」へと進化する過程を体験していただけたかと思います。この「収集→判断→通知→自動化」という流れは、プログラミングで現実世界の問題を解決するための、非常に強力なパターンです。

このプロジェクトで得た知識と経験を元に、ぜひあなた自身の「あったらいいな」を形にする、新しい自動化プロジェクトに挑戦してみてください!

これまでの探検、ありがとうございました! Happy Automating! 🤖

その他の投稿はこちら

コメント

このブログの人気の投稿

タイトルまとめ

これで迷わない!WindowsでPython環境構築する一番やさしい方法 #0

【Python標準ライブラリ完結!】11の冒険をありがとう!君のPython力が飛躍する「次の一歩」とは? 🚀