6月20日から 1週間オンラインで開催される WordPress イベント
というイベントがもうすぐあるので、ウェブサイトでの告知なども加速していきます。今回はオンラインかつ無料のため、期間は1週間ありますが1週間のうち出張可能な期間はどこかなど悩むことなく気軽に参加できます。皆さんも WordPress にご興味があれば、是非登録してみてください!
さて、筆者も実行委員としていろいろやっているので、最新情報チェックを仕事のコミュニケーションとして使っている Google Chat で通知を受けられるのが便利だよなぁと思いました。まぁ Slack なども使ってますので、IFTTT 経由で Slackチャネルに自動通知はできるんですけど、Slackは登録数が結構多いこともあり、常時起動するとなにかに集中しているときに横槍が入りやすいので見たいときにたちあげているんですよね。また Google App Script でそうしたことができるスキルを会得したいというのも目的としてあります。
WordCamp のサイトは WordPress で構築されていますから、RSS情報があります。あとはそれをよく使っている Google Apps Script で手軽にささっと Google Chat へ投稿できたらハッピーです。思い立ったら即実行です!
注意点
この手法は、Google Workspace 専用の Google Chat の WebHook 機能を利用しています。だからこそ手軽にできるわけですが、そうではない場合には Google Chat API 経由での利用になるでしょう。そちらについては、GoogleChat のREST APIを叩いてみるよ スペース情報をとってくる編(Qiita)などを参考にしてみてはと思います。将来的には無料版 Google アカウhンとでも WebHook機能が使えるといいですね!
手順
- ATOM形式のRSSのURLを取得
- RSS情報のうち最新データの日時を目視で確認する
- 投稿先の Google Chat にて Webhook を設定する
- 取得したRSS情報のうち、最新データを 指定した Google Chat へ投稿(Bot)する、Google Apps Scriptコードを新規作成する
- 成功したら、投稿した「スレッド」情報を取得し、次回から同一スレッドへ投稿するよう改変
- 毎日自動実行するようにトリガーを設定する
手順を理解することが目的のため(自身の備忘録にもなる)、コードについては必要最小限にしています。運用しだせば、「1日以内のRSS情報を取得してデータがあれば Google Chat へ投稿」というのが一般的だと思います。しかしながら、まずはテストする必要があり、日々更新されていないサイトの場合には、1日以内のデータがない可能性があります。したがって、目視で最新データの日付を確認し、その日付を含むように◯日以内という設定をする必要があることに注意。
これがうまくいけば、Google Alert (特定キーワード検索結果をRSSを利用した RSS情報も投稿も可能になるので、いろいろできそうだなと感じています。
参考情報
STEP 1. ATOM形式のRSSのURLを取得
WordPress の RSS情報は、ATOMを始め
いくつかのフィードが用意されています。
今回利用するのは、ATOM形式のため、WordPressサイト/feed/atom/ がURLになります。WordCamp Japan 2021 のサイトの場合には、
- https://japan.wordcamp.org/2021/feed/atom
になります。
STEP 2. RSS情報のうち最新データの日時を目視で確認する
Google Chrome など ATOM形式のRSS情報のソースを表示できるツールを使って、
- https://japan.wordcamp.org/2021/feed/atom
にアクセスします。
*以下、ソースの説明をしますが、タグの属性は説明に必要な部分以外削除しています。また、説明をする上で分かりづらいタグも消してます。
各記事は
<entry>記事ソースデータ</entry>
の形式になっており
<entry>
<name>作成者</name>
<title>タイトル</title>
<link href="記事のリンク先"/>
<updated>最終更新日時</updated>
<category>カテゴリー</category>
<summary>概要</summary>
<content>記事本文</content>
</entry>
などのように並んでいます。
今回コード内で登場するのは、
- <title>タグの「タイトル」情報
- <link>タグの属性「href」のリンク情報
- <category>タグのカテゴリー情報
- <updated>タグの更新日時情報
の4つです。Google Chat はテキストにリンクを付与できませんので、実際に投稿するデータは
投稿日時: タイトル / リンク
としています。カテゴリー情報もコードでは取得していますが、今回は使ってません。
2021年5月13日現在、WordCamp Japan 2021 の最新データのうち、利用する部分のデータは下記の通りです。
<entry>
<title type="html"><![CDATA[はじめての WordCamp わぷーと友達になるインタビュー #01]]></title>
<link rel="alternate" type="text/html" href="https://japan.wordcamp.org/2021/my-first-wordcamp-experience01/" />
<updated>2021-05-10T03:33:26Z</updated>
<category scheme="https://japan.wordcamp.org/2021" term="ブログ" />
</entry>
つまり「3日前のデータ」だということを覚えておきましょう。
STEP 3. 投稿先の Google Chat にて Webhook を設定する
チャットのタイトル部分の▼をクリックし、「Webhookを管理」を選択。
下記のようにタイトルをつけましょう。このタイトルが Google Chat に投稿されるスレッドの「タイトル」になります。
設定が終わったら、下記のように投稿用URLができます。こちらをコピーして、テキストエディタなどにペーストして一時的にメモ(保存)しておいてください。
STEP 4. 取得したRSS情報のうち、最新データを指定した Google Chat へ投稿(Bot)する、Google Apps Scriptコードを新規作成する
Google Apps Script は、
から作成してください。
そして、下記にアクセスして表示されるコードをコピー&ペーストします。
そして次について変更します。
変更1:投稿先、情報源(RSS)を設定
// Google Chat の WebHookを指定(指定した名前のスレッドで投稿される)
var chat_webhook_url = '保存していた WebHook URLを入れる';
赤文字の部分を変更してください。
もし WordCamp Japan 2021 の RSS以外の RSSを取得したい場合には下記を変更してください。
var rss_url = 'https://japan.wordcamp.org/2021/feed/atom';
変更2:取得するデータの日時指定
var LIMIT_TIME = 24*60*60 * 3;//1日を秒に変換(一番最新のRSSが何日前かで 3の数字を変える)
STEP 2 で確認した最新記事が、「今現在」から何日前なのかを指定します。
本記事を書いている 2020年5月13日では、3日前なので 3と入力しています。
以上が変更点です。
Google Apps Script を保存する
Google Apps Script の名前(プロジェクト名)を変更するために「無題のプロジェクト」をクリックします。
ここでは 下記のような名前にしています。何をする目的であるのかわかる名前にしておくと便利でしょう。
そして、いまはもう知らない人も多いかもしれないフロッピーアイコン(▷ 実行の左側)をクリックして保存します。
保存できたら、「▷ 実行」がクリックできるになるので、このボタンを押して onMessage 関数を実行します。
初めて実行する場合、下記のように作成した Google Apps Script のプロジェクトをGoogleアカウントに対して許可する処理が必要です。無料版 Googleアカウントの場合には、信頼できないプロジェクトなどのメッセージがでますが、Google Workspace に関してはそうした物がでず、下記のような3つの処理のみになります。
うまくいけば、下図のように実行ログに実行開始、投稿された記事内容、実行終了が表示されます。
この時点で Google Chat には、下記の新規スレッドが投稿されているはずです。
STEP 4. 成功したら、投稿した「スレッド」情報を取得し、次回から同一スレッドへ投稿するよう改変
再度、実行ログを確認してみましょう。
そこにある、
"thread" : の "name" : の値「spaces/◯◯◯/threads/△△△」部分をコピーします。
Google Apps Script のコード内にある
// "name": "一度実行し、ログを参考に threadのnameを入れる。ここをコメントアウトすると新規スレッドになる"
の赤文字部分を、spaces/◯◯◯/threads/△△△ に置き換えます。
そして先頭の // を削除します。
"name": "spaces/◯◯◯/threads/△△△"
できたら、プロジェクトを保存します。
そして再度「▷ 実行」をクリックして実行してみてください。
うまくいけば、先程のスレッドに追加される形で、同じ記事が追加されているはずです。
STEP 5. 毎日自動実行するようにトリガーを設定する
さて、STEP 4. までで RSS情報を投稿するスレッドが手動でうまく投稿できたのであれば、あとはそれを自動実行するようタイマーをしかけることにあります。
まず最初にコードの
var LIMIT_TIME = 24*60*60 * 3;//1日を秒に変換(一番最新のRSSが何日前かで 3の数字を変える)
の部分を
var LIMIT_TIME = 24*60*60;//1日を秒に変換
として1日以内に更新された記事のみを対象にするなど、更新範囲のルールを決めてください。ここでは毎日早朝の実行されるようにするので、1日以内とします。
もし3日のままでれば、毎日3日内の記事が投稿され続けることになります。
スクリプトの左サイドメニューにあるトリガーアイコン(目覚まし時計)をクリックし、「トリガーを追加」ボタンをクリックします。
下図のように、実行する関数は onMessage とし、早朝に実行されるように設定します。午前と午後をうっかり見間違うこともあるので注意が必要です。
うまく設定できたら、あとは実際にその時間に実行されることを確認します。
場合によっては、2分後などに一時的に設定し直して試すと良いでしょう。
2021年5月13日 @kimipooh