【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

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

【シェルスクリプト】apacheのrotatelogsとシェルスクリプトでログ管理をする【運用】

お疲れ様です。
rotatelogsでapacheのログを出力している環境でログを管理する必要があったので、忘備録として残しておきます。

背景

CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/access_log.%Y%m%d%H 14400 540" combined  env=!no_log
ErrorLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/error_log.%Y%m%d 86400 540"

apacheに標準でついてくるrotatelogsでログが世代管理されている前提でですね、
2週間経過したログは削除、1日経過したログは圧縮するスクリプトを作ってcronに登録してみます。

スクリプトの作成

vi /usr/local/bin/apache_accesslog_compress.sh
====================================================================
#!/bin/sh
#ディレクトリを移動する
cd /usr/local/apache2/logs
#14日経過したログを削除する
find ./ -name 'access_log.*' -mtime +13 -daystart -exec rm {} \;
#1日経過したログを圧縮する
find ./ -name 'access_log.*' -mtime +0 -daystart  -exec gzip {} \;
====================================================================

findコマンドの-daystartは
コマンドを実行した日の00:00を-mtimeの基準とするオプションです。

cronへの登録

crontab -e
=======================================================
00 04 * * * /usr/local/bin/apache_accesslog_compress.sh
=======================================================