Webサイトの更新を監視し通知するスクリプト

プログラミング

Webサイト更新監視・通知スクリプト

概要

本スクリプトは、指定されたWebサイトのコンテンツ変更を定期的に検知し、更新があった場合にユーザーへ通知する機能を提供します。Webサイトの更新を自動化し、最新情報を効率的に把握することを目的としています。

このスクリプトは、Python言語で実装され、BeautifulSoupライブラリを用いてWebページのHTMLを解析し、requestsライブラリでHTTPリクエストを送信します。通知機能としては、メール送信と、より高度な連携が可能なWebhook機能に対応しています。

機能一覧

  • Webサイトのコンテンツ変更検知
  • 定期的な監視間隔の設定
  • メールによる更新通知
  • Webhookによる通知(Slack、Discordなどへの連携)
  • 監視対象URLの複数指定
  • 初回アクセス時のコンテンツ保存
  • 差分比較による変更箇所の特定(オプション)

技術スタック

プログラミング言語

Python 3.x

主要ライブラリ

  • requests: HTTPリクエストの送信
  • BeautifulSoup: HTML/XMLの解析
  • smtplib: メール送信(SMTPプロトコル)
  • email: メールメッセージの構築
  • json: 設定ファイルやWebhookペイロードの操作
  • schedule: 定期実行スケジューリング
  • hashlib: コンテンツのハッシュ値を生成し、変更を高速に検知(オプション)

その他

設定ファイル(JSON形式)により、監視対象URL、メール設定、Webhook設定などを柔軟に管理します。

スクリプトの構造

メイン処理

スクリプトの実行起点となります。設定ファイルを読み込み、監視対象URLごとに監視タスクをスケジュールします。

監視モジュール

各監視タスクの実行を担当します。指定されたURLにHTTPリクエストを送信し、レスポンスを取得します。取得したコンテンツは、前回保存されたコンテンツと比較されます。

コンテンツ比較

監視モジュールは、取得したWebページのコンテンツを、前回保存されたコンテンツと比較します。比較方法としては、以下のいずれか、または組み合わせが考えられます。

ハッシュ値比較

コンテンツ全体のハッシュ値を計算し、ハッシュ値が変更されていれば更新と判断します。高速ですが、変更箇所を特定するのは困難です。

HTML解析比較

BeautifulSoupを用いてHTMLを解析し、特定の要素やテキストコンテンツの変更を比較します。より詳細な変更検知が可能ですが、処理負荷は高くなります。

通知モジュール

コンテンツに変更が検出された場合、このモジュールが起動し、設定された通知方法でユーザーに情報を伝達します。

メール通知

SMTPサーバーを経由して、指定されたメールアドレスに更新通知メールを送信します。件名には更新があったWebサイトのURL、本文には更新日時などを記載します。

Webhook通知

指定されたWebhook URLに対してHTTP POSTリクエストを送信します。リクエストボディには、JSON形式で更新情報(URL、更新日時、変更箇所など)を含めることができます。これにより、SlackやDiscordなどのチャットツール、またはカスタムアプリケーションとの連携が容易になります。

設定管理

設定ファイル(例: `config.json`)により、スクリプトの動作を外部から制御します。

設定項目の例
  • urls: 監視対象のURLリスト
  • monitoring_interval_seconds: 監視間隔(秒)
  • notification_method: 通知方法(”email” または “webhook”)
  • email_settings: メール送信に必要な設定(SMTPサーバー、ポート、認証情報、送信元・宛先アドレスなど)
  • webhook_settings: Webhook送信に必要な設定(Webhook URL、HTTPヘッダーなど)
  • save_content_path: 初回アクセス時のコンテンツ保存ディレクトリ
  • enable_hash_comparison: ハッシュ値比較を有効にするか否か

導入・実行手順

前提条件

  • Python 3.x のインストール
  • 必要なライブラリのインストール

ライブラリのインストール

以下のコマンドを実行して、必要なライブラリをインストールします。

pip install requests beautifulsoup4

(必要に応じて `smtplib`, `email`, `json`, `schedule`, `hashlib` もインストールします。これらはPython標準ライブラリに含まれている場合が多いです。)

設定ファイルの準備

`config.json` という名前で、上記「設定管理」に記載したような設定ファイルを作成し、監視したいWebサイトのURL、通知方法、メールやWebhookの詳細設定などを記述します。

スクリプトの実行

作成したPythonスクリプト(例: `monitor.py`)を以下のコマンドで実行します。

python monitor.py

スクリプトはバックグラウンドで実行され、設定された間隔でWebサイトの更新を監視します。

カスタマイズ・拡張性

監視対象の柔軟性

単一のURLだけでなく、複数のURLをリストで指定できます。また、正規表現を用いて動的にURLを生成して監視することも可能です。

通知方法の拡張

メールやWebhook以外にも、LINE Notify、Twilioなど、様々な通知サービスとの連携を容易に実装できます。

差分表示機能

更新があった際に、具体的にどの部分が変更されたのかを詳細に表示する機能を追加できます。これにより、変更内容の把握がより迅速になります。

エラーハンドリングの強化

ネットワークエラー、タイムアウト、HTTPエラーなどの例外処理をより詳細に実装することで、スクリプトの安定性を向上させます。

GUIインターフェース

TkinterやPyQtなどのGUIツールキットを使用し、設定や監視状況を視覚的に管理できるインターフェースを開発することも可能です。

セキュリティに関する考慮事項

  • 認証情報管理: メール送信などで使用するパスワードなどの認証情報は、設定ファイルに平文で記述せず、環境変数やよりセキュアな方法で管理することを推奨します。
  • Webhook URL: Webhook URLは機密情報となり得るため、アクセス権限の管理や、HTTPS通信の利用などを検討してください。
  • リソース消費: 監視間隔が短すぎると、監視対象サーバーや自身のネットワークに負荷がかかる可能性があります。適切な間隔を設定してください。

まとめ

本Webサイト更新監視・通知スクリプトは、Webサイトの変更を自動的に追跡し、迅速な情報共有を可能にする強力なツールです。Pythonの豊富なライブラリを活用することで、柔軟なカスタマイズや拡張が可能です。設定ファイルの容易な管理と、メール・Webhookによる通知機能により、様々なユースケースに対応できます。導入・設定は比較的容易であり、Webサイトの運用や情報収集の効率化に大きく貢献することが期待できます。