Help us understand the problem. What is going on with this article?

Fitbitのアクティビティデータを他サービスへ連携したい!その2

More than 1 year has passed since last update.

前回までのあらすじ

Fitbitのアクティビティデータを他サービスへ連携したい!

  • Fitbitのデータを連携したい
  • IFTTTのWebhooksでXML連携ができない
  • Zapier使ってみたら?でもFitbitのトリガーが無い! <- いまここ

IFTTTと合わせ技で何とかしてみる

こんな感じで無理やり連携させる。

DataFlow

もっとうまいやり方があるのだろうと思いつつ、送ったデータのログも残るので、Google Sheetsをはさむこととする。

Zapを作っていく

トリガーの作成

Google Sheetsを選択し、以下のような流れで作成していく。

  1. トリガーの選択
  2. Googleアカウントの選択
  3. スプレッドシート、ワークシートの選択

「トリガーの選択」では、2種類のトリガーが選択できる。

  • New or Updated Spreadsheet Row(行の追加と更新)
  • New Spreadsheet Row(行の追加)

アクションの作成

トリガーに対する処理を追加する。
今回メインの目的であるXMLのPOSTを実現するため、二段階のアクションを設定する。

Code

Zapier_Action_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

Zapier_Action_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ステップを使わずコード書けということなのだろう。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away