前回までのあらすじ
Fitbitのアクティビティデータを他サービスへ連携したい!
- Fitbitのデータを連携したい
- IFTTTのWebhooksでXML連携ができない
- Zapier使ってみたら?でもFitbitのトリガーが無い! <- いまここ
IFTTTと合わせ技で何とかしてみる
こんな感じで無理やり連携させる。
もっとうまいやり方があるのだろうと思いつつ、送ったデータのログも残るので、Google Sheetsをはさむこととする。
Zapを作っていく
トリガーの作成
Google Sheetsを選択し、以下のような流れで作成していく。
- トリガーの選択
- Googleアカウントの選択
- スプレッドシート、ワークシートの選択
「トリガーの選択」では、2種類のトリガーが選択できる。
- New or Updated Spreadsheet Row(行の追加と更新)
- New Spreadsheet Row(行の追加)
アクションの作成
トリガーに対する処理を追加する。
今回メインの目的であるXMLのPOSTを実現するため、二段階のアクションを設定する。
Code
データとして送信するためのXMLを作成する処理。
JavascriptとPythonが選択できる。
今回は大したことはしないのでどちらでもよいが、Javascriptを選ぼう。
-
Input Data
トリガーで取得できるデータをコード内で使用できるよう、名前を付ける。
なお、スプレッドシートの1行目の値が、列名としてリストに表示される。わかりやすい名前を記載しておこう。 -
Code
データを作成するためのJavascriptコードを書く。
上記で名前を付けたデータは、inputData.[名前]のように呼び出すことができる。
次のアクションに渡すデータとして「output」という変数が予約されており、この変数にJSONデータとして格納する。
ベタだが以下のような感じで書いていこう。
var xml = '<?xml version="1.0" encoding="UTF-8"?>';
xml += '<xml>';
xml += '<data>';
xml += inputData.Steps;
xml += '</data></xml>';
output = {'payload':xml};
Webhooks
外部のWebサービスへデータをPOSTするアクション。
上記で作成したデータをそのまま送りたいので、「Custom Request」を選ぼう。
-
Method
GET/PUT/POST/PATCH/DELETE/Customから選択できる。
今回はPUT。 -
URL
送信先のURLを指定する。 -
Data Pass-Through? (optional)
リクエストデータを前のアクションからのデータで上書きするかどうか。
通常、デフォルトのnoでよい。 -
Data (optional)
リクエストデータを指定する。
トリガーからのデータと前のステップのデータが指定できる。
今回は前のステップで作成したデータの、「payload」を指定する。
ちなみに、実行時のログやメモリ使用量なども指定できるが、あまり用途が思いつかない。 -
Unflatten (optional)
アンダースコア「_」をネストとして扱うかどうか。noでよい。 -
Basic Auth (optional)
ベーシック認証のID/パスワードを指定する。 -
Headers (optional)
リクエストヘッダを指定する。今回は「Content-Type:application/xml」を指定しよう。
今後の課題
以上でめでたくFitbitのデータを他サービスへ連携できるようになった。
ただ、課題というか、ちょっと工夫したい箇所も残った。
- Webhooksで送信したときのレスポンスが取得できない
他サービスに連携できたのかどうか、レスポンスに含まれるエラーコードを取得して失敗したら通知する、といったルールを作りたかったのだが、どうもWebhooksではレスポンスを取得できない仕様のようだ。
Webhook Not Returning Results for next Steps
Unfortunately, not all apps can send back data in a way that our system can interpret in subsequent steps.
If you're familiar with Python or Javascript, a potential workaround is to do this with a Code step.
Please note that the Code app is an advanced feature and we aren't able to help troubleshoot the code if there are errors.
やりたければCodeステップで実装しろ、と書いてある。
Codeステップの中でレスポンス発行もできるようなので、Webhooksステップを使わずコード書けということなのだろう。