ポンコツエンジニアのごじゃっぺ開発日記。

いろいろポンコツだけど、気にするな。プログラム&ロボット大好きなポンコツが日々の記録を残していきます。 自動で収入を得られるサービスやシステムを作ることが目標!!

IFTTTとGASを連携させると夢が広がる!今すぐ連携させるぞ

Webサービス同士を連携できるサービスIFTTTですが、その連携先にGoogle Apps Script(以降、GAS)と連携させることができれば、よりあらゆることができるようになると思っています。 なので、今回はそれを実現させてみましたので紹介したいなと思います。

f:id:ponkotsu0605:20190923135237p:plain

はじめに

はじめに、IFTTTとGASのそれぞれの簡単な説明をしたいなと思います。

IFTTTとは

「if this then that」の略。

IFTTTは、「レシピ」と呼ばれる個人作成もしくは公に共有しているプロフィールを使って数あるWebサービス同士で連携することができるWebサービスです。IFTTTと連携できるサービスは日々増え続けていて、これもか!ってくらい、意外なサービスも連携しています。連携しているサービスの一覧を眺めるだけでも、使い方がいろいろ思いつき、組み合わせはすでにとても大きな数値になっているでしょう。

ifttt.com

Google Apps Scriptとは

Google Apps ScriptはGoogle が提供しているサービスの拡張機能の名称で、GASと略されることが多いです。自分もGASと呼んでいます。 また、GASからGmailやSpreadSheetなどの拡張・操作をすることが簡単に行えるため、様々な使い方があります。ここ数年くらいはGASを使っていますが、日々新たな使い方を発見しているので、工夫の仕方で無限に広がるんじゃないかなと思います。

developers.google.com

IFTTTからGASへ

さて、今回の記事では、IFTTTからGASを連携させるところについて話します。

f:id:ponkotsu0605:20190923135237p:plain

今回は自分が愛用しているRSSリーダーのFeedlyを使って、Feedlyの記事をIFTTTを使ってGASに送りつける、というケースで考えてみましょう。

feedly.com

FeedlyからのアクションからGASを呼び出すことができるので、例えば、こんな感じのことが思いつきました。

  • お気に入りした記事の内容をGmailで送信することができる
  • Googleカレンダーにポピュラーな記事をカテゴリごとにカレンダーを分けて保存する
  • 特定のワードが含まれる記事をTwitterに投稿する

f:id:ponkotsu0605:20190923155059p:plain

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として公開

上のメニューから、公開 -> ウェブアプリケーションとして導入 を選択。 f:id:ponkotsu0605:20190923152530p:plain

すると、以下のようなポップアップが表示されるかと思います。 f:id:ponkotsu0605:20190923152753p:plain ここで注意するのが、アプリケーションにアクセスできるユーザー全員(匿名ユーザーを含む)にしてあげる必要があります。 そして、導入をクリックします。 f:id:ponkotsu0605:20190923152923p:plain ここから承認の許可をしていきます。許可を確認を選択していきます。

表示されたポップアップで自分のアカウントをアカウントを選びます。 f:id:ponkotsu0605:20190923153041p:plain すると、このような画面が表示されるかと思いますが、右下の方の詳細をクリックして、IFTTTテスト(安全ではないページ)に移動をクリックします。 f:id:ponkotsu0605:20190923153213p:plain すると、IFTTTテスト が Google アカウントへのアクセスをリクエストしていますのように表示されると思うので、画面下の方の許可ボタンをクリックします。

すると、開かれたもろもろのポップアップが閉じ、以下のような画面が表示されるかと思います。 f:id:ponkotsu0605:20190923153302p:plain ここに表示されている現在のウェブ アプリケーションの URLをメモしておきましょう。こちらが、IFTTTから投げられるURLのエンドポイントになるものです。

IFTTTの設定

次はIFTTTの設定です。

if

まずはトリガーを設定していきます。 FeedlyでNew article saved for later。すなわち、記事の保存(あとで読む)を行ったら、というトリガーを設定してみます。

f:id:ponkotsu0605:20190923151005p:plain Choose a serviceでFeedlyを選択します。

f:id:ponkotsu0605:20190923151014p:plain New article saved for laterを選択します。

that

トリガーに対してのアクションを設定します。 f:id:ponkotsu0605:20190923151339p:plain ここでは、GASとの連携なので、Webhooksを使用します。 webhooksを使用すると、特定のURLにデータを添えてリクエストを投げてくれることをしてくれます。

f:id:ponkotsu0605:20190923151408p:plain webhooksを選択します。

f:id:ponkotsu0605:20190923153526p:plain Make a web requestしかありませんが、それを選択します。 これが特定のURLにリクエストを投げるというものです。

f:id:ponkotsu0605:20190923153735p:plain 最後に、どういったリクエストを投げるかの設定をします。 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については、こちらのサイトとかが参考になるかもです。

www.tohoho-web.com

動作確認

今回の例だと、Feedlyでお気に入り?あとで読む的なボタンを押すと、見事スプレッドシートのlogというシートにレコードが追加されるようになりました。 f:id:ponkotsu0605:20190923154415p:plain

今後の展望

このようにして、最初にも書きましたが、GASでできることならなんでもIFTTTから連携させることができます。 f:id:ponkotsu0605:20190923155059p:plain 大事なことなので、何度も貼り付けますが、上の画像のように、IFTTTと連携できるサービスとGASで扱えるサービスとをつなげるという、まるで夢のようなことが簡単に実現できます!