【LINE Notify】シェルスクリプトでWEBスクレイピングしてみた【bash】

よくチェックするサイトに新着記事が投降されたら、LINE NotifyのAPIを叩いて通知するコードを書いてみました。

#!/bin/bash
# LINEのTOKENを定義
TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# WEBページの情報を取得
MSG=`curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl`
# 作業ディレクトリの定義
OPE_DIR=/opt/SCRAPING/megamouth
# 実行時のWEBページ情報を記録するファイルを定義
INFO_FILE=$OPE_DIR/info.txt
# 前回実行時のWEBページ情報を記録するファイルを定義
PRE_INFO_FILE=$OPE_DIR/pre_info.txt
if [ ! -e $OPE_DIR ]; then
# ディレクトリの作成
mkdir -p $OPE_DIR
fi
# 前回実行時の記録ファイルが無ければ作成し通知
if [ ! -e $PRE_INFO_FILE ]; then
curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl > $PRE_INFO_FILE
curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=${MSG}" https://notify-api.line.me/api/notify
exit 0
fi
# 今回取得した情報を変数に代入
curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl > $INFO_FILE
# 前回と今回取得した情報を比較
diff -s $INFO_FILE $PRE_INFO_FILE
# DIFFの実行結果を変数に代入
DIFF_STATUS=$?
if [ ${DIFF_STATUS} -eq 1 ]; then
# 前回取得した情報と今回取得した情報に差異があれば通知
curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=${MSG}" https://notify-api.line.me/api/notify
elif [ ${DIFF_STATUS} -eq 2 ]; then
# diff実行時にエラーが発生すればエラーを通知
curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=error" https://notify-api.line.me/api/notify
fi
# 情報ファイルを更新
cp -fp $INFO_FILE $PRE_INFO_FILE
#!/bin/bash # LINEのTOKENを定義 TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # WEBページの情報を取得 MSG=`curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl` # 作業ディレクトリの定義 OPE_DIR=/opt/SCRAPING/megamouth # 実行時のWEBページ情報を記録するファイルを定義 INFO_FILE=$OPE_DIR/info.txt # 前回実行時のWEBページ情報を記録するファイルを定義 PRE_INFO_FILE=$OPE_DIR/pre_info.txt if [ ! -e $OPE_DIR ]; then # ディレクトリの作成 mkdir -p $OPE_DIR fi # 前回実行時の記録ファイルが無ければ作成し通知 if [ ! -e $PRE_INFO_FILE ]; then curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl > $PRE_INFO_FILE curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=${MSG}" https://notify-api.line.me/api/notify exit 0 fi # 今回取得した情報を変数に代入 curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl > $INFO_FILE # 前回と今回取得した情報を比較 diff -s $INFO_FILE $PRE_INFO_FILE # DIFFの実行結果を変数に代入 DIFF_STATUS=$? if [ ${DIFF_STATUS} -eq 1 ]; then # 前回取得した情報と今回取得した情報に差異があれば通知 curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=${MSG}" https://notify-api.line.me/api/notify elif [ ${DIFF_STATUS} -eq 2 ]; then # diff実行時にエラーが発生すればエラーを通知 curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=error" https://notify-api.line.me/api/notify fi # 情報ファイルを更新 cp -fp $INFO_FILE $PRE_INFO_FILE
#!/bin/bash

# LINEのTOKENを定義
TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# WEBページの情報を取得
MSG=`curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl`
# 作業ディレクトリの定義
OPE_DIR=/opt/SCRAPING/megamouth
# 実行時のWEBページ情報を記録するファイルを定義
INFO_FILE=$OPE_DIR/info.txt
# 前回実行時のWEBページ情報を記録するファイルを定義
PRE_INFO_FILE=$OPE_DIR/pre_info.txt

if [ ! -e $OPE_DIR ]; then
        # ディレクトリの作成
        mkdir -p $OPE_DIR
fi

# 前回実行時の記録ファイルが無ければ作成し通知
if [ ! -e $PRE_INFO_FILE ]; then
        curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl > $PRE_INFO_FILE
        curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=${MSG}" https://notify-api.line.me/api/notify
        exit 0
fi

# 今回取得した情報を変数に代入
curl https://www.megamouth.info/archive | grep "<a class=\"entry-title-link\"" | sed -e 's/<[^>]*>//g' | nl > $INFO_FILE

# 前回と今回取得した情報を比較
diff -s $INFO_FILE $PRE_INFO_FILE

# DIFFの実行結果を変数に代入
DIFF_STATUS=$?

if [ ${DIFF_STATUS} -eq 1 ]; then
        # 前回取得した情報と今回取得した情報に差異があれば通知
        curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=${MSG}" https://notify-api.line.me/api/notify
elif [ ${DIFF_STATUS} -eq 2 ]; then
        # diff実行時にエラーが発生すればエラーを通知
        curl -X POST -H "Authorization: Bearer ${TOKEN}" -F "message=error" https://notify-api.line.me/api/notify
fi

# 情報ファイルを更新
cp -fp $INFO_FILE $PRE_INFO_FILE

なんだかもっといろいろと使えそうですね。
アラート通知とか。。
↓皆さんもぜひ
LINE Notify

投稿者: snk

保有資格 ・TOEIC 835 ・LPIC 304 ・AWS SAA/SAP ・GCP PCA ・IPA SC

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です