2017.05.23

簡単!3ステップでウェルネス連携!

はじめに

初めまして。製品開発部の奴賀(ぬか)です。
そろそろ例の季節がやってきますね。そう梅雨ですね。、ヽ`、ヽ`个c(゚∀゚∩)`ヽ、`ヽ、 雨だ♪
梅雨の時期には細菌性の食中毒が増えてきますので、少しでも免疫力を高めて予防するためには、
十分な睡眠と日頃からの運動が大切ですね♪
というわけで、今回は『簡単!3ステップでウェルネス連携!』と題しまして、
SkyOnDemandを利用し、ウェアラブルデバイスのFitbit Flexから睡眠と歩数の情報を取得し、
チャットツールのChatWorkに定期的に投稿する方法をご紹介したいと思います。


≪1st Step≫ ChatWork APIの準備

  1. まずは、ChatWorkアカウントを準備します。
  2. チャットワークAPI (プレビュー版)に申し込みます。チャットワークAPI(プレビュー版)ご利用開始のお知らせという件名のメールが送られてきたら次の手順に進みます。
  3. 動作設定>>API発行より開発用のAPIトークンを取得します。

APIトークンを取得しました♪


≪2nd Step≫ Fitbit APIの準備

  1. Fitbit Flexを購入します。(確かにこれがないと始まりませんよね)
  2. Fitbitウェブサイトに登録し、Fitbit Flex本体をfitbit.comアカウントとペアリングします。(本体同梱の取扱説明書をお読みください)
  3. dev.fitbit.comでリフレッシュトークンを取得するために、SkyOnDemandのアプリケーション情報を登録します。

アプリケーション名や説明等、お好きな内容で設定してください。
Callback URLはリフレッシュトークンを取得するためだけですので、ローカルホストを指定しておきます。

ここからはOAuth 2.0 tutorial pageに沿って進めるだけですので、サクサクといきましょう。

  1. アプリケーションを登録したら、Client IDとClient Secretが表示されますので控えておきましょう。
  2. 次にClient IDとClient Secretを利用し、Authorization Codeを取得しましょう。
  3. その後Send to Hurl.itのリンクをクリックし、リフレッシュトークンを取得するためのHTTP Request生成ページへ遷移します。
  4. 最後にリフレッシュトークン取得のHTTP Requestを発行し、終了です。

リフレッシュトークンを取得しました♪

OAuth 2.0の認証周りで少し手間が掛かりますが、サクッといけましたね。


≪Last Step≫ SkyOnDemandスクリプト作成

さて、各種APIを利用する準備が整いましたので、早速スクリプトを作成していきましょう。
今回はウェルネス連携プロジェクトとして、下記の内容のスクリプトを作成したいと思います。

メインスクリプト

  • M_メイン処理実行 ・・・ 本プロジェクトのメイン処理を行う

Fitbit関連サブスクリプト

  • S01_01_アクセストークン取得 ・・・ 既に取得しているリフレッシュトークンを利用し、アクセストークンを取得する
  • S01_02_睡眠時間取得 ・・・ 昨夜の実際の睡眠時間を取得する(Fitbit APIでは、目覚めていた状態や寝付くまでの時間を除いた、純粋な睡眠時間を取得できます)
  • S01_03_歩数取得 ・・・ 昨日、今日の2日で2万歩を目標とし、今日の目標歩数を取得する
  • S01_00_Fitbitメッセージ生成 ・・・ ChatWorkに投稿するメッセージを生成する

ChatWork関連サブスクリプト

  • S02_00_メッセージ投稿 ・・・ 特定のルームへ指定した内容のメッセージを投稿する


グローバルリソース設定

スクリプトで利用するグロバールリソースを下記の内容で設定します。

接続名 接続タイプ URL 備考
REST接続設定_FitbitAPIエンドポイント REST(REST接続設定) https://api.fitbit.com Fitbit APIを利用するためのグローバルリソース設定
REST接続設定_ChatworkAPIエンドポイント REST(REST接続設定) https://api.chatwork.com/v1 ChatWork APIを利用するためのグローバルリソース設定


スクリプト詳細

それでは、主なスクリプト内容をご説明したいと思います。

Fitbit関連サブスクリプト

S01_01_アクセストークン取得


ファイルに保存されているFitbit APIのリフレッシュトークンを読み込み、
アクセストークンを取得します。(リフレッシュトークンも更新されます)
取得したアクセストークンをスクリプト出力変数の o-accessToken に設定し、
更新されたリフレッシュトークンをファイルに保存する流れとなります。
Fitbit Api Documentを参考にプロパティ等を設定します。


パスを /oauth2/token に設定します。

必須パラメータの grant_type と refresh_token を設定します。

レスポンスのデータ形式はJSON形式となります。

Content-Type を application/x-www-form-unlencoded に設定します。

ベーシック認証情報を設定します。

取得したアクセストークンはスクリプト出力変数の o-accessToken に設定し、
リフレッシュトークンはファイルに上書き保存します。
以降のFitbit APIへのリクエストはここで取得したアクセストークンを利用することとなります。

S01_02_睡眠時間取得


スクリプト入力変数の i-accessToken から渡されるアクセストークンを利用し、
今日の睡眠時間(○○分)を取得し、それを××時間○○分に変換しスクリプト出力変数の o-sleepingTime に設定します。

今日の睡眠時間を取得するためのパスを設定します。
ちなみに、上記のように記載すると実行時にはスクリプト変数の ${today(yyyy-MM-dd)}が展開されます。

RFC6750に沿って OAuth 2.0 の認証を行うために、 Authorization: Bearer ヘッダを設定します。

○○分を××時間○○分に変換するロジックとなります。

JSON形式のスキーマを作成するには、XMLファイルから読み込んでスキーマを作成すると便利ですね!

S01_03_歩数取得

S01_02_睡眠時間取得と同様の流れのため、詳細は割愛します。

現在日時ロジックアイコンにて現在日時を取得し、 -1 を加算し前日を取得したのちに
日時フォーマッティングロジックアイコンにて yyyy-MM-dd 形式に整形します。

S01_00_Fitbitメッセージ生成

既に作成したサブスクリプト群を利用し、ChatWorkへ投稿するメッセージを生成し、
スクリプト出力変数の o-message へ設定します。

複数行文字列定数ロジックアイコンを使用し、ChatWorkへ投稿するメッセージを生成します。

複数行文字列定数ロジックアイコン内でサブスクリプトのスクリプト出力変数を直接利用した場合、
実行時に展開されません。そのため、一旦スクリプト変数に展開するようにしましょう!

ChatWork関連サブスクリプト

S02_00_メッセージ投稿

スクリプト入力変数の i-message に設定されたメッセージをChatWorkの特定の room へ投稿します。
ChatWork API ドキュメントを参考にプロパティ等を設定します。

今回はパスに特定のroom idを埋め込みます。

必須パラメータの body を設定します。

Step 1 で取得したAPIトークンを設定します。

body の value にスクリプト入力変数の i-message を設定します。

メインスクリプト

M_メイン処理実行

投稿メッセージ取得サブスクリプトで取得したメッセージ内容を、
メッセージ投稿サブスクリプトに渡して実行するというシンプルな流れです。
メッセージ投稿サブスクリプトを呼び出す際のプロパティで、
スクリプト入力変数の i-message に忘れずに投稿メッセージ取得サブスクリプトの
スクリプト出力変数の o-message を設定するようにしましょう。
これで、スクリプトの作成は完了しました。


スケジュールトリガー設定

休日はゆっくりとしたいので、平日の朝10時にChatWorkへ投稿するように設定したいと思います。
まずは、ウェルネス連携プロジェクトをサービスとして登録します。

次に、下記の内容でスケジュールトリガーの設定を行います。

実行開始時間 開始日 終了日 休日の動作 休日設定 サービス スクリプト
10:00 チェックなし チェックなし 休日には実行しない 標準カレンダー root@ウェルネス連携プロジェクト M_メイン処理実行

これにて全ての作業が完了となります。
それでは明日を楽しみに、本日は眠りにつきたいと思います(っд`)


翌朝

ヾ(o´ェ`o)ノGOOD MORNING!! 早速ChatWorkを見てみたいと思います。

投稿してくれていますね。念のため fitbit.com のダッシュボードを確認したいと思います。

  • 睡眠

  • 体重


投稿された情報は正しい値のようです。
1万3千歩は厳しいですが、頑張って歩きたいと思います(`・ω・´)


最後に

簡単!3ステップでウェルネス連携!如何でしたでしょうか?
今回はスペースの都合上、至極簡単なスクリプトをご紹介させて頂きましたが、
睡眠時間に応じてメッセージ内容を変更させたり、気象情報と連携させてお勧めの運動時間を通知させたり、
もっと多くのアクティビティデータを取得して分析するのも楽しそうですね。
InsTech(Insurance x Technology)の盛んな海外では、毎日一定以上歩くことにより保険料が安くなる商品が既に販売されているようですが、
国内でも今後ユニークな保険商品が販売されるのではないかと思っております。
SkyOnDemandは無料トライアル制度もございますので、ご興味のある方はお気軽にお問い合わせください。

1 件
     
  • banner
  • banner

関連する記事