5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【簡単】Webサイトの差分チェック+LINE通知をシェルスクリプトでやる

Last updated at Posted at 2022-07-27

はじめに(自己紹介)

筆者は、HottyDBという全文検索エンジン+機械学習ランキング+レコメンデーションの機能を搭載したRDBMSを個人開発しています!
本記事とは関係ないですが、HottyDBを解説した記事もあるので、是非そちらも見てみてください!

この記事の概要

概要

簡単なシェルスクリプトでWebサイトの更新をチェックし、差分があった場合にLINE通知する仕組みを紹介します。
EC2(AWS)のようなVPS環境で、crontabを使って実現する方法です。
かなり単純な方法ですが、いざWebサイトの差分をチェックしなきゃ!となったときのためにまとめておきます。

背景(なぜこれをやるか?)

  • 子供の保活がきっかけ
  • 保育園見学の予約受付開始がホームページでのみ連絡され、早い者勝ちで予約が取れる状況だった
  • メール通知では気づかない。LINE通知なら筆者も妻も気付くことができそう。
  • 他にも小児科のインフルエンザ予約開始がホームページでのみ連絡されるケースもあったので、保活以外にも有効活用できそう

手順

1. LINEグループ作成

まず通知先となるLINEグループを作成します。
LINEアプリを開いてグループを作成しましょう。

ポイント

  • グループ名は任意で良い
  • グループメンバーに 「LINE Notify」 のアカウントを追加するのを忘れないようにしましょう(後からでも追加できます)

他にも通知したい相手がいれば、その人をグループメンバーに追加しておきましょう。

2. LINE Notify設定

続いて、LINE Notifyのアクセストークンを取得します。

  1. LINE Notifyのサイト にアクセスします。
  2. 右上のログインボタンでログインします(QRコードログインが便利です)
  3. ログインすると右上にアカウント名が表示されるので、そこをクリックし「マイページ」にアクセスしましょう
  4. 画面を少しスクロールし「トークンを発行する」ボタンをクリックしましょう
  5. トークン発行画面で「1の手順」で作成したLINEグループを選択し、発行しましょう
  6. トークンが表示されたら忘れずにコピーして、どこかに保存しておきましょう

3. シェルスクリプト作成

環境

  • bashのあるLinux環境
  • curlとxmllintのコマンドが使えれば動くはずです
  • 筆者の場合、EC2でAmazon Linuxのインスタンスを立てたらそのままで動きました

スクリプト

diffcheck.sh という名前で作成したとします。
下記がそのスクリプトの中身です。

#!/bin/bash

### 設定 ###
LINE_ACCESS_TOKEN=xxx # 発行したLINE Notifyのアクセストークン
SITE_URL="https://www.hottydb.com/news/blog/" # 差分チェックしたいサイトのURL
MESSAGE="差分がありました" # 通知メッセージ
XPATH="//body" # HTMLから抽出したいXPATHを指定

### スクリプト本体 ###
# 指定サイトの、XPATHで指定した箇所の現在値をnowに保存
curl -s $SITE_URL | xmllint --html --xpath $XPATH - 2>/dev/null > now

touch pre # 初回実行時のエラー回避用
diff now pre  > diff
if [ $? -ne 0 ]; then
  # 差分があればLINE通知実行
  DIFF=`cat diff`
  curl -X POST -H "Authorization: Bearer ${LINE_ACCESS_TOKEN}" -F "message=$MESSAGE $SITE_URL $DIFF" https://notify-api.line.me/api/notify
fi
mv now pre
rm diff

スクリプトは以上です!
前半部分はただの変数設定なので、結構簡単じゃないでしょうか?

設定のポイント

使う際は下記の設定部分をご自身の状況に合わせて変更してください。

### 設定 ###
LINE_ACCESS_TOKEN=xxx # 発行したLINE Notifyのアクセストークン
SITE_URL="https://www.hottydb.com/news/blog/" # 差分チェックしたいサイトのURL
MESSAGE="差分がありました" # 通知メッセージ
XPATH="//body" # HTMLから抽出したいXPATHを指定

SITE_URL

SITE_URLには差分チェックしたいサイトのURLを指定します。

SITE_URL="https://www.hottydb.com/news/blog/" # 差分チェックしたいサイトのURL

この設定は、筆者が開発したHottyDBの公式サイト(ブログ一覧ページ)の差分チェックをする設定となっています。

XPATH

XPATHを指定してHTML内のどの部分の差分をチェックしたいかを指定します。

XPATH="//body" # HTMLから抽出したいXPATHを指定

この設定の場合は、bodyタグ全体の差分チェックをすることになります。

4. crontab設定

crontab実行ユーザーのホームディレクトリに先ほど作成したシェルスクリプト 「diffcheck.sh」 を配置しましょう。
chmod 755 diffcheck.sh などのコマンドで実行可能ファイルに変更しておきましょう。

続いて crontab -e コマンドで下記ジョブを追加しましょう。

*/30 * * * * ./diffcheck.sh > latest_log.txt 2>&1

※サイト側に迷惑にならない程度の頻度で実行するようにしましょう。この設定では30分に1回の設定となります。

さいごに

手順は以上となります。

これでWebサイトの更新を定期的に確認し、差分があった場合にLINE通知してくれるBOTができました!
VPSの環境さえあれば結構簡単な方法ではないでしょうか?
皆さんも是非試してみてください。

最後に繰り返しになりますが、筆者が個人開発したHottyDBに関する記事もありますので、そちらも是非×2見てみてください!!

参考にしたサイト

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?