LoginSignup
1
2

More than 1 year has passed since last update.

【シェルスクリプト】ワンパンマンの最新話が更新されたらLINE通知を送る

Posted at

概要

なんでもシェルスクリプトでやってしまいたい人です。
今回は人気漫画「ワンパンマン」の最新話が更新されるとLINE通知を送るという、
結構実用的な処理をシェルスクリプトでやっちゃいます。

カラクリ

■最新話が更新されているかの判定

これが一番大事。結論から言うと、
htmlのソース中の「次の話を読む」という文字列があるかどうかを見る
です。
あのサイトでは、次の話がある/ないで以下の挙動を示すのだ。

  • 次の話がある→漫画のページの最後に「次の話を読む」ボタンが表示される。
  • 次の話がない→漫画のページの最後に「次の話を読む」ボタンは表示されない。

この性質を利用してやろうということだ。つまり、
これまで最新話だったページのhtmlソースに対し'次の話を読む'という文字列に対してgrepをかけてやり、
ひっかかれば最新話が更新されている
ということだ。
この判定処理を、数分おきとか定期的に行えば良い。

■最新話が更新されていたら、LINEのAPIを使って通知を送る

LINEには、POSTで叩くとLINE通知を送れるようなAPIが用意されているのでこいつを利用する。
メッセージ内容はPOSTパラメータとして渡せる。
このAPIの具体的な使用方法に関しては、こちらの記事などを参考にすると良い。

もう少し具体的に

上記アイデアを実現するために、具体的には以下のようなシステムを構築する。
ワンパンマン.png

以下で、実際にこのシステムを構築していく。

シェルスクリプトのソースコード

シェルスクリプトのコードは以下の通り。

newepisode.sh
#!/bin/sh
urlfile=$(dirname $0)/latest.txt # 最新話のURLが貼ってあるテキストファイル
html=$(mktemp) # tmpファイル作成
# 最新話のhtmlを取得
# curl -s:余計な出力はしない
cat ${urlfile} | xargs -I{} curl -s {} > ${html}
# 次の話が追加されたかをチェック
cat ${html} | grep '次の話を読む' > /dev/null 2>&1
# 次の話が追加されている場合の処理
if [ "$?" = "0" ]; then
  # latest.txtの更新
  cat ${html} |
    grep '次の話を読む' |
    sed -e 's/>/\n/g' -e 's/</\n/g' -e 's/href=/\n/g' |
    grep '次の話を読む' -B1 |
    grep 'https:' > ${urlfile}
  url=$(cat ${urlfile}) # 最新話のURL
  # LINE通知
  curl -X POST -H 'Authorization: 認証情報' -F "message=
  最新話が更新されました
  ${url}" https://notify-api.line.me/api/notify > /dev/null 2>&1
fi
rm ${html}

※実際に使用する際は、以下のコマンドで実行権限を与えておく。

chmod +x newepisode.sh

latest.txtを用意する

現在の最新話のページのURLを張り付けたテキストファイル(ファイル名:latest.txt)を、
上のシェルスクリプトと同じディレクトリに配置する。

crontabの設定

1分おきに上のシェルスクリプトを実行する。

crontab
* * * * * スクリプトを配置しているディレクトリのフルパス/newepisode.sh
1
2
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
1
2