Webサービス同士を連携できるサービスIFTTTですが、その連携先にGoogle Apps Script(以降、GAS)と連携させることができれば、よりあらゆることができるようになると思っています。 なので、今回はそれを実現させてみましたので紹介したいなと思います。
はじめに
はじめに、IFTTTとGASのそれぞれの簡単な説明をしたいなと思います。
IFTTTとは
「if this then that」の略。
IFTTTは、「レシピ」と呼ばれる個人作成もしくは公に共有しているプロフィールを使って数あるWebサービス同士で連携することができるWebサービスです。IFTTTと連携できるサービスは日々増え続けていて、これもか!ってくらい、意外なサービスも連携しています。連携しているサービスの一覧を眺めるだけでも、使い方がいろいろ思いつき、組み合わせはすでにとても大きな数値になっているでしょう。
Google Apps Scriptとは
Google Apps ScriptはGoogle が提供しているサービスの拡張機能の名称で、GASと略されることが多いです。自分もGASと呼んでいます。 また、GASからGmailやSpreadSheetなどの拡張・操作をすることが簡単に行えるため、様々な使い方があります。ここ数年くらいはGASを使っていますが、日々新たな使い方を発見しているので、工夫の仕方で無限に広がるんじゃないかなと思います。
IFTTTからGASへ
さて、今回の記事では、IFTTTからGASを連携させるところについて話します。
今回は自分が愛用しているRSSリーダーのFeedlyを使って、Feedlyの記事をIFTTTを使ってGASに送りつける、というケースで考えてみましょう。
FeedlyからのアクションからGASを呼び出すことができるので、例えば、こんな感じのことが思いつきました。
- お気に入りした記事の内容をGmailで送信することができる
- Googleカレンダーにポピュラーな記事をカテゴリごとにカレンダーを分けて保存する
- 特定のワードが含まれる記事をTwitterに投稿する
GASからできることは全部できるので、なんでもできるって言えるんじゃないかなって個人的には思っています。
GASの設定
まずはGAS側を用意しておきます。
ログ確認用のスプレッドシート
予め、動作確認用にスプレッドシートを作成しておいてください。URLが以下のようになると思いますが、その <スプレッドシートID>
のところがスプレッドシートIDなので覚えておいてください。
https://docs.google.com/spreadsheets/d/<スプレッドシートID>/edit#gid=0
logというシートを作成しておいてください。(シート1のままでも問題ありませんが、以下で紹介するソースコードを一部変更する必要があります。)
GASのスクリプト
スクリプトは以下のように、HTTPリクエストを受け付けられるような書き方をします。
function doPost(e) { Logger.log(e.postData.getDataAsString()) var params = JSON.parse(e.postData.getDataAsString()); var articleTitle = params.articleTitle; var articleUrl = params.articleUrl; var sourceTitle = params.sourceTitle var createAt = params.createAt; log([ articleTitle, articleUrl, sourceTitle, createAt, ]); } function log(data) { SpreadsheetApp.openById('<スプレッドシートID>').getSheetByName('log').appendRow(data); }
上のソースのスプレッドシートIDのところを、上で作成したスプレッドシートのIDを入力しておいてください。
GASをAPIとして公開
上のメニューから、公開 -> ウェブアプリケーションとして導入 を選択。
すると、以下のようなポップアップが表示されるかと思います。 ここで注意するのが、アプリケーションにアクセスできるユーザーを全員(匿名ユーザーを含む)にしてあげる必要があります。 そして、導入をクリックします。 ここから承認の許可をしていきます。許可を確認を選択していきます。
表示されたポップアップで自分のアカウントをアカウントを選びます。 すると、このような画面が表示されるかと思いますが、右下の方の詳細をクリックして、IFTTTテスト(安全ではないページ)に移動をクリックします。 すると、IFTTTテスト が Google アカウントへのアクセスをリクエストしていますのように表示されると思うので、画面下の方の許可ボタンをクリックします。
すると、開かれたもろもろのポップアップが閉じ、以下のような画面が表示されるかと思います。 ここに表示されている現在のウェブ アプリケーションの URLをメモしておきましょう。こちらが、IFTTTから投げられるURLのエンドポイントになるものです。
IFTTTの設定
次はIFTTTの設定です。
if
まずはトリガーを設定していきます。 FeedlyでNew article saved for later。すなわち、記事の保存(あとで読む)を行ったら、というトリガーを設定してみます。
Choose a serviceでFeedlyを選択します。
New article saved for laterを選択します。
that
トリガーに対してのアクションを設定します。 ここでは、GASとの連携なので、Webhooksを使用します。 webhooksを使用すると、特定のURLにデータを添えてリクエストを投げてくれることをしてくれます。
webhooksを選択します。
Make a web requestしかありませんが、それを選択します。 これが特定のURLにリクエストを投げるというものです。
最後に、どういったリクエストを投げるかの設定をします。 URLには上の方でGASで設定したエンドポイントのURLを貼り付けます。 MethodはPOSTにしてください。GAS側でdoPost()というメソッドで受けているので、それに合わせています。 Content Typeはapplication/jsonに設定しています。 Bodyがちょっと大変で、画像のように生のJSONを入力しています。
{"articleTitle": "{{ArticleTitle}}","articleUrl":" {{ArticleURL}}","sourceTitle":"{{SourceTitle}}","createAt":"{{CreatedAt}}"}
自分の場合は、記事のタイトルと記事のURLとサイトのタイトルと作成日時をパラメータに付与しています。フォームのすぐ右下のAdd integredientを使うと、IFTTT側で用意しているパラメータの候補を出してくれるので、そちらを参考にしながら作成してみましょう。
JSONについては、こちらのサイトとかが参考になるかもです。
動作確認
今回の例だと、Feedlyでお気に入り?あとで読む的なボタンを押すと、見事スプレッドシートのlogというシートにレコードが追加されるようになりました。
今後の展望
このようにして、最初にも書きましたが、GASでできることならなんでもIFTTTから連携させることができます。 大事なことなので、何度も貼り付けますが、上の画像のように、IFTTTと連携できるサービスとGASで扱えるサービスとをつなげるという、まるで夢のようなことが簡単に実現できます!