Googel API 第25回

投稿者: | 2016年2月19日

Google API 第25回

今回はGoogle Fit APIsについて紹介します。

まずGoogle Fitについて説明します。
Google Fitは運動した記録を取り、分析するためのアプリケーションです。
腕時計型などのAndroid Wear端末やその他のセンサからデータを記録することができます。
記録したデータはウェブサイトやスマホから閲覧することができます。
Google Fitでは期間、歩数、距離、消費カロリーでの目標設定ができ、1日の達成度を確認することができます。
またGoogle Fit内のグラフやカレンダーで運動時間や消費カロリーなどの分析を行うことができます。

これらの機能をAPI化したものがGoogle Fit APIsです。
ここからGoogle Fit APIsについて説明していきます。

■Google Fit APIsの開発者への注意事項
Google Fit APIsの利用に当ってGoogleが開発者に責任ある利用を求めており、
5つの規則を定めてあるので必ず守るようにしましょう。

・どのようなデータを収集するのかユーザに説明すること。
・ユーザーからのデータ削除要求に誠実に答ること。
・フィットネスストアからデータを読み込んだら、フィットネスストアに収集したデータを書き込むこと。
・医療データや生体認証データの販売、宣伝目的などでGoogle Fit APIを使用しないこと。
・Google Fitを使用する前に利用規約をきちんと読んで確認する。
Google Fit APIを使用することにより利用規約に同意したことになります。

■Google Fitの構成要素
Google Fitはフィットネスストア、センサフレームワーク、権限とユーザコントロール、Google Fit APIsから
構成されています。
・フィットネスストア
フィットネスデータを保存するためクラウドサービスです。
・センサフレームワーク
フィットネスストアと連携してデータのやり取りを簡単にするためのフレームワークです。
・権限とユーザコントロール
フィットネスデータを操作するユーザの権限を設定することができます。
・Google Fit APIs
フィットネスストアにアクセスするためのAPIです。
APIにはAndroidで使用できるAndroid APIsとJavaScriptで使用できるFit REST APIがあります。

■Android APIsの構成
Google Fit APIsはSensors API、Recording API、History API、Sessions API、Bluetooth Low Energy API、
Config APIから構成されています。
・Sensors API
端末のセンサにアクセスしてリアルタイムにフィットネスデータを受け取るためのAPIです。
・Recording API
フィットネスデータをフィットネスストアに保存するためのAPIです。
・History API
フィットネス履歴へのアクセスや記録されたフィットネスデータの読込や削除を行うためのAPIです。
・Sessions API
セッションデータとフィットネスデータを一緒に格納するためのAPIです。
・Bluetooth Low Energy API
Bluetooth Low Energy(以下、BLE)端末のセンサへアクセスするためのAPIです。
・Config API
カスタムデータや追加設定をするためのAPIです。

Androidアプリ開発では上記のAPIを使用することになります。

■Fit REST APIについて
Fit REST APIではデータソースの管理、データセットの操作、セッションの操作を行うことできます。
データソースの管理ではデータソースの作成、取得をするができます。
データセットの操作ではデータセットの作成、取得、削除、集計をするができます。
セッションの操作ではセッションのリストを作成、削除することができます。

フィットネスアプリの作成は、Android APIsを用いた方法とFit REST APIを用いた方法があります。
今回はFit REST APIを用いた方法を紹介します。

■Fit REST APIを用いた方法
Fit REST APIを使用するにはGoogle Developers Consoleで
Fitness APIを有効にし、クライアントIDを作成する必要があります。

ここでは「Google Developers Consoleの設定」「Fit REST APIの実行」の順に使用方法を説明します。

1.Google Developers Consoleでの設定
参考サイトのGoogle Developers Consoleにアクセスしプロジェクトを作成します。
そして、下記の操作を順に行います。

・Fitness APIを有効にする
左メニューの【API Manager】から【概要】を選択します。
概要画面に移動したら、Fitness APIを検索し有効にします。

・OAuth2のクライアントIDを作成する
左メニューの【API Manager】から【認証情報】を選択します。
認証情報画面に移動したら、【新しい認証情報】のセレクトボックスから
【OAuth2.0 クライアント ID】を選択します。

設定値
アプリケーションの種類:ウェブアプリケーション
名前:Google Fit
承認済みの JavaScript 生成元:任意のURL(例:http://localhost)
承認済みのリダイレクト URI: 任意のURL

【作成】を選択して作成完了です。

作成したクライアントIDはAPI実行時に必要になります。

2.Fit REST APIの実行
フィットネスストアに保存されたデータを読み込む方法を説明します。

まず認証用のclient.jsとjQuryを扱うためのjquery.jsを読み込ませます。



client_idとscopeを設定します。
client_idには作成したクライントIDを設定します。
scopeは6種類あります。今回はactivityデータの読込ための権限を設定します。

var client_id = "YOUR_CLIENT_ID";
var scope = ["https://www.googleapis.com/auth/fitness.activity.read"];
var access_token = "";

gapi.auth.authorizeのメソッドはOAuth 2.0の認証を行うためのメソッドです。
callbackにはコールバック関数を指定します。

    gapi.auth.authorize({client_id: client_id, scope: scope, immediate: false}, callback);

コールバック関数ではaccess_tokenを取得し、
access_tokenを用いてデータストアに保存されているデータの読み込みを行います。
データの取得にはajaxを使用します。
typeには”GET”、urlにはデータストアへアクセスするためのURL、dataにはaccess_token、
successにはデータ取得成功時の処理を設定します。

function callback(e){
    access_token = e.access_token;

    $.ajax({
        type:"GET",
        url: "https://www.googleapis.com/fitness/v1/users/me/dataSources",
        data: {
            "access_token": access_token
        },
        success: function(data){
            console.log(data);
        }
    });
}

データの取得に成功するとフィットネスストアに保存したデータが取得できます。
下記のデータは30秒間に徒歩で8歩あるいたというデータです。
dataTypeNameのcom.google.step_count.deltaは徒歩を表しています。
endTimeNanos(ナノ秒)からstartTimeNanos(ナノ秒)を引いた値があるいた時間です。
valueはあるいた歩数です。

{
  "dataSourceId":
      "derived:com.google.step_count.delta:1234567890:Example Manufacturer:ExampleTablet:1000001",
  "maxEndTimeNs": 1397515179728708316,
  "minStartTimeNs": 1397513334728708316,
  "point": [
    {
      "dataTypeName": "com.google.step_count.delta",
      "endTimeNanos": 1397513365565713993,
      "originDataSourceId": "",
      "startTimeNanos": 1397513334728708316,
      "value": [
        {
          "intVal": 8
        }
      ]
    },
...
}

以上がGoogle Fit APIsの説明になります。
Fit REST APIを用いるとJavaScriptでデータの読込・書込ができるので
WindowsやiOSなど色々な端末向けのアプリをつくることができます。
Android端末向けのアプリを作成する場合はAndroid APIsというAndroidに特化したAPIがあり
楽にアプリが作成できるようです。

Google Fitはまだ開発段階で
今後AppleのHealthのように脈拍や血圧などの測定機能などが増えていくことが期待できます。

最後に、Google Fit デベロッパーチャレンジをご存知でしょうか。
応募者または応募者チームがオリジナルまたはアップデート版のAndroidアプリを制作して、
Google Play ストアに提出するスキルコンテストです。
今回のGoogle Fit デベロッパーチャレンジは終了しますが
Googleではこのような開発者コンテストが度々あるようなので、挑戦してみてはいかがでしょうか。

<参考サイト>
・Google Fit APIs

・Google Fit

Google Fit デベロッパーチャレンジ

<付録>
・Fit REST APIを用いた簡単なサンプル
使用する際はYOUR_CLIENT_IDを自身で作成したクライアントIDに置き換えてください。

<script src=https://apis.google.com/js/client.js<</script>
<script src=https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.js></script>
<script>
var client_id = "YOUR_CLIENT_ID";
var scope = ["https://www.googleapis.com/auth/fitness.activity.read"];
var access_token = "";

function getToken(){
    gapi.auth.authorize({client_id: client_id, scope: scope, immediate: false, response_type: "token"}, callback);
}

function callback(e){
    access_token = e.access_token;

    $.ajax({
        type:"GET",
        url: "https://www.googleapis.com/fitness/v1/users/me/dataSources",
        data: {
            "access_token": access_token
        },
        success: function(data){
            console.log(data)
        }
    });
}
window.onload = getToken
</script>