「Puppeteer」+「LINE Notify」でサイトの更新時のみ通知を受け取ってみる

「Puppeteer」+「LINE Notify」でサイトの更新時のみ通知を受け取ってみる
■ 店頭より得で、予約しやすいオンラインショップ。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

前回の記事では閲覧数向上が期待できそうなキーワードの「Puppeteer」「LINE Notify」のそれぞれの解説、およびサイトのサムネイルを通知してみるといった試みを実施してみました。
<bitWave関連記事『「Puppeteer」+「LINE Notify」でサイトのサムネイルを通知してみる』>

まだまだ「Puppeteer」「LINE Notify」は引っ張れると思っていますので、今回もその2つを使いつつ、定期的にサイトを訪問して情報に更新があった場合にのみ、通知を受け取るといった仕組みを作ってみました。

手順1:前回作成したjsファイルを修正

本ブログ「bitWave」のトップページでは、最上部の記事が最新記事にあたりますので、これを取得するようにしてみましょう。

DOMを検索し、記事タイトルを取得できるかを確認する

さて、上記ですが「querySelector」によって、1番目の記事のa要素のDOMを取得し、そのtitle属性を取得するようにしています。
実際にjsをターミナル上で実行して見ましょう。

本記事執筆時の最新タイトルが無事に取得できたようです。

続いて画像と一緒にLINE通知してみましょう。
ちなみに前回の記事で実施したものとの比較も掲載します。

【before】

【after】

「message」に先ほど取得したタイトルを入れているだけです。
一体、これでどのように見えるでしょうか。
おっ! 無事に通知されていることが確認できましたね。

手順2:定期的に「Node.js」ファイルを実行する

次は定期的にサイトに巡回し、更新内容があるかどうかをチェックするようにしましょう。

Mac上で定期的にスクリプトを実行させるには、一般的に2つの方法があります。

  1. launchctlでplistを読み込む
  2. cronで実行する

「plist」の作成はやや面倒だったので、今回は「crontab」で設定することにしました。

上記をターミナルで叩いた後に、以下のような設定してください。

一行目のPATH設定が重要で、普段の状態のPATHと合わせないと動きません。
今回、私も解決するまでに結構な時間がかかってしまいました。
「Phantom.js」などでも同じようにするらしいですね。

さて、先ほどの「crontab」では1分ごとに特定の「shellscript」を実行するようにしていました。
その中身はこんな感じです。

Nodeでjsファイルを実行しているだけですね。
Nodeのファイルはいじっておりません。

するとどうなるでしょう。
はい。こんな感じで、しつこくbitWaveの記事を送り続けるようにすることができました。

さてこの方法で済ませてしまうと、「LINE Notify」からずっと通知を受け続けてしまうことになってしまいますね。
続いて、記事に差分があった場合のみ通知を送るようにしましょう。

手順3:記事に更新があった場合に通知を送るようにする

まずはどのように「更新があったか」を判断できるようにすればいいのか考えてみましょう。

カンタンに解決するのであれば、「前回の記事タイトルと今回取得した記事タイトルが不一致であれば最新である」と判定することが一番ラクなのかと思われます。
まずはやってみましょう。

実行する「cron」の頻度を下げる

どうも「LINE Notify」のドキュメントを見る限りでは、画像アップロードには制限があるらしいのです。
<参照:LINE Notify『LINE Notify API Document』>

実際に「X-RateLimit-ImageLimit」を調べてみると、1時間で上限50回と記載されていました。
つまり1分毎で最新画像を通知させていたのでは、50分経過でリミットに達してしまいます。

実際、bitWaveは平日1日2回の記事更新を原則としているので、1時間で1回程度でも十分すぎるぐらいだったりします。
ということで、今回は「crontab -e」で “*/1 * * * *(1分毎に実行)” を “0 * * * *(毎時0分に実行)” に修正しちゃいましょう。

取得した記事タイトルをファイルに残しておく

それでは取得したタイトルをテキスト形式で保存しちゃいましょう。

続いて読み込みも行います。

「readFileSync」関数についてですが、ファイルが存在しない場合は、エラーで処理が止まってしまいます。
つまり「try」と「catch」で囲む必要があるので要注意です。

これら2つを合わせると以下のような感じになります。

テキストファイルを読み込んだ結果、ファイルが存在し、かつ最新で取得してきた記事タイトルと同じであれば「更新なし」とみなし、処理はストップさせるようにしています。
また先ほどと同様、「crontab」で実行するとホームディレクトリが変わってしまうので、絶対パスで記述されることをオススメいたします。

それでは記事が変わった場合は、タイトルをテキストに保存して、通知を行うようにします。
さてはて、うまくいくのでしょうか。。。

こんな感じで大成功ですね!!

Macの場合、スリープモードだと動かないといった課題も残っていますが、「ちゃんと社内ブログチェックしてる~?」といった鋭いツッコミにも対処できるようにはなりました。(編集部:こらっ! 自発的に読んで下さい!!)

次回は要望があれば、もう少し高度なブラウザプッシュのような仕組みを作ってみたいと思います!

■最新のiPhoneの購入・機種変更なら店頭より得で、予約しやすいオンラインショップ。
機種の頭金や使わないオプションパックをつけて年間何万円も損していませんか?
オンラインショップなら故障のサポートもしっかりしていて最低限の費用。待たされることもありません。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

最新のiPhoneを得して乗り換えるなら、
キャッシュバックキャンペーン実施中!【おとくケータイ.net】
がお得です。

以下の記事も読まれています。