NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

Web サイトの更新を通知する方法

Web サイトの更新があった場合、これを検知してメールなどで通知する方法として、Python を利用した Web ページ監視ツール「urlwatch」があります。

urlwatch とは

Github に公開されている urlwatch は、特定サイトの Web ページまたは任意のシェルコマンドの出力を監視し、前回の取得した情報との差分を抽出できます。レポートはメールなどで送信が可能です。
https://github.com/thp/urlwatch
https://urlwatch.readthedocs.io/en/latest/index.html

インストールと設定

openSUSE Tumbleweed に urlwatch 2.21 をインストールする場合の例です。

インストール

openSUSE ソフトウェアで「urlwatch」を検索し、openSUSE Tumbleweed の「1クリックインストール」をクリックしてインストールします。
f:id:FriendsNow:20201227012923p:plain

SSH 有効化(オプション)
hostname:~# systemctl status sshd.service 
hostname:~# systemctl start sshd.service 
hostname:~# systemctl stop firewalld.service 
urlwatch ジョブ作成
username@hostname:~> export EDITOR="/usr/bin/vi"
username@hostname:~> urlwatch --edit
urlwatch をアップグレード
hostname:~# pip3 install --upgrade urlwatch
監視サイトとフィルタの設定

name: に任意の名前、url: に監視したい URL を設定します。複数定義する場合は、--- で区切ります。
filter: に何も指定しない場合、Web ページ全体が取得対象となります。Flash などの動的なページでは、ソースコードが頻繁に変わるため、filter: で監視対象を可能な限り絞る必要があります。filter: の詳細はこちらを参照

vi ./.config/urlwatch/urls.yaml
kind: url
name: Network Engineer Blog
url: https://friendsnow.hatenablog.com/
filter:
- element-by-tag: body
- html2text
---
kind: url
name: オープンソースの WAF(ModSecurity)について
url: https://friendsnow.hatenablog.com/entry/2020/11/21/110000
filter:
- element-by-tag: body
- html2text:
通知設定

Gmail で送信する場合は以下のように設定します。

vi ./.config/urlwatch/urlwatch.yaml
report:
  email:
    enabled: true
    from: '*******@gmail.com'
    html: ture
    method: smtp
    sendmail:
      path: sendmail
    smtp:
      auth: true
      host: smtp.gmail.com
      port: 587
      starttls: true
      user: ''
      insecure_password: *******
    subject: 'Webサイトの更新がありました!: {jobs}'
    to: '*******@gmail.com'

注意点として、Gmail を利用する場合は、以下の手順で Gmail アカウント構成の変更も必要です。

  1. https://myaccount.google.com へアクセスします。
  2. 左ペインの「セキュリティ」をクリックします。
  3. 「安全性の低いアプリのアクセス」を有効にします。

プライマリ Gmail アカウントでこの設定はセキュリティ対策として適切ではなく非推奨です。
urlwatch 専用のアカウントを作成することを強く推奨します。

確認

urlwatch --list コマンドで確認します。

username@hostname:~> urlwatch --list
1: Network Engineer Blog ( https://friendsnow.hatenablog.com/ )
2: オープンソースの WAF(ModSecurity)について ( https://friendsnow.hatenablog.com/entry/2020/11/21/110000 )
実行

urlwatch を実行します。最初の実行でソースコードを保存し、2回目の実行で差分があった場合、更新内容(赤字:削除、緑字:追加)が出力されます。

username@hostname:~> urlwatch

出力例
f:id:FriendsNow:20201123003010p:plain

以上