「業務の改善」または、「業務の効率化」を目指している方、こんにちは。
今回は、「Google Apps Script(GAS)」を使った業務の改善・効率化の事例紹介の第五弾です。
弊社は、協同組合様や運送事業者様向けにETCカードの管理・請求書・走行明細書発行システム「ETCクラウド」を開発・提供していますが、システムだけでなく、運用業務のアウトソーシング(事務代行)もお受けしております。
そのアウトソーシングでお受けしている運用業務の効率化、ミス削減のために行っている事例をご紹介させていただければと思います。
前回は、「Webサイトの更新を通知する」方法をご紹介しましたが、Webサイトの構成が変更されたり、アクセスカウンターや広告がついているWebサイトの場合は、データをきちんと処理しないと更新通知がうまくいかなくなってしまいます。今回は、このような場合の処理を踏まえた「Webサイトのテキスト分析」の事例をご紹介します。

前回行ったのは、「Google Apps Script(GAS)」で、Webサイトを定期的に巡回し、更新があれば、メッセージを送信するスクリプトを作ることです。
内容としては、チェックしたいWebサイトの一覧をGoogleスプレッドシートで作り、Webサイトのリソースを取得するAPIを使って、テキストを取り出した上で、データの要約となるハッシュ値を計算し、前回のハッシュ値と異なれば、更新されたと判断してメッセージを送信するというものでした。
単純にWebサイトのHTMLを取得した後にハッシュ値を計算し、前回分と比較しているというものなので、広告やアクセスカウンターなど、ほんの少しでもサイトに変化があれば更新と判断されてしまいます。
それを回避するには、サイト全体のハッシュ値を取るのではなく、サイトの特定部分だけのハッシュ値を取ることです。
ここで利用するのが「テキストの分析を行う」GASライブラリです!
GASライブラリとは、他の人が作った関数を利用できる機能のことで、とても便利なライブラリがいくつも公開されています。
今回利用するのは、「Parserライブラリ」です。
以下で公開されています。(作者は、Ivan Kutil さん)

GASライブラリを利用するには、スクリプトID(ライブラリキー)が必要なのですが、公開されたライブラリ情報の中にある以下を参考します。
@library_key: 1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw (previous M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV)
Parser – Ivan Kutil
利用するスクリプトIDは、以下です。
1Mc8BthYthXx6CoIz90-JiSzSafVnT6U3t0z_W3hLTAX5ek4w0G_EIrNw
GASライブラリを利用するのは、GASのスクリプトエディタの左メニューにある「ライブラリ」の横の「+」をクリックします。
ライブラリ追加画面になるので、上記のスクリプトIDを入力して検索、追加とすれば、「Parserライブラリ」の利用が可能になります。
サイトの特定の部分だけ抽出するためにこの「Parserライブラリ」を使うのですが、使い方は、以下の通り。
条件に該当した最初の1回のみ抽出する場合
Parser.data(contentText).from(‘開始位置’).to(‘終了位置’).build()
条件に該当する限り繰り返して抽出する場合
Parser.data(contentText).from(‘開始位置’).to(‘終了位置’).iterate()
今回のように特定の部分だけ抽出する場合は、上のbuild()を利用すればOKです。対象となるWebサイトにて特定部分にあたるHTMLの開始位置と終了位置を指定することで、更新があったかどうかを判断する部分を絞ることができます。以下が例です。
Parser.data(contentText).from(‘<div id=”contents”>’).to(‘<div id=”footer”>’).build()
これを利用することで、サイト全体のハッシュ値を取るのではなく、サイトの特定部分だけのハッシュ値を取ることができるようになります。
「Parserライブラリ」はWebサイトのテキスト分析をするには非常に使い勝手の良いライブラリです。getContentTextで取得したテキストをParserライブラリのbuildとiterateを用いて分析対象のhtmlテキストを抽出するという形なので比較的自由度も高いです。
Webサイトの更新チェックは、手動で行うとそれなりに手間がかかるので、自動化することで、作業の効率化の1つになるかと思います。参考になれば幸いです。