JINSMEMEで取得したパーソナルデータをダウンロードする

## 目的
ウェアラブルデバイスって近未来間あってかっこよくない？
なんかおもちゃ買って遊びたいよね

## 利用サービス・言語
* [JINS MEME](https://jins-meme.com/ja/)
3点式眼電位センサー、3軸加速度センサー、3軸ジャイロ（角速度）センサーのついたメガネです。
BLEでスマホに接続し、データを収集します。

* [JINS MEME SDK](https://jins-meme.github.io/sdkdoc/)
Android,iOS,MONACA,Node.js,WebAPIが用意されています。
今回は~~容易に用意できる(爆笑)~~WebAPIを使います

* [Advanced REST client](https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo?hl=ja)
Chrome拡張のRESTクライアントになります。
これしか知らないので他に良いものがあれば教えてください。

## 準備
1.アカウント作成、スマホへのインストール。
2.JINS MEME DEVELOPERSへの登録(https://jins-meme.github.io/sdkdoc/api/register.html)
　プライバシーポリシーURLとOAuthリダイレクトURLはhttp://google.comにしました。
　アクセス権はOFFICE,RUN,DRIVEすべてチェック入れましょう。
　作成後、アプリIDとアプリSecretは控えておいてください。
3.元データを取得するため、メガネ掛けて外走ってきてください。

**注意**
JINSから出ているアプリは

* MEME
* MEME OFFICE
* MEME RUN
* MEME RUNNext
* MEME DRIVE(現・DRIVE2)
* MEME TAIKAN
* MEME ZEN

の7種です。
WebAPIで取得することが可能なデータはこの中のOFFICE,RUNNext,DRIVEのみとなります。

また、GoogleStoreにはOFFICE,RUNNextがリリースされていないのでAndroidユーザは一生懸命ランニングしても無駄になります。
~~一週間走った結果が無駄になった人が当記事を書いています。~~


|アプリ|データ取得|AppStore|GoogleStore|
|:-:|:-:|:-:|:-:|:-:|
|MEME|×|〇|〇|
|OFFICE|〇|〇|×|
|RUN Next|〇|〇|×|
|DRIVE|〇|〇|〇|
|RUN|×|〇|〇|
|TAIKAN|×|〇|〇|
|ZEN|×|〇|×|

* [OFFICE](https://jins-meme.com/ja/office/)
JINS MEME OFFICEは、あなたのポテンシャルを最大限に引き出す、初めての「集中力計測アプリ」です。JINS MEMEメガネのセンサーで、アタマ・ココロ・カラダのデータを計測。集中力を可視化。計測データを振り返ることで、集中を使いこなすための勝ちパターンやルーティンが見つかります。さらに、カレンダーを連携すると、自分が何をしている時に集中できていたかがわかり、より詳細な振り返りを可能にします。

* [RUN Next](https://jins-meme.com/ja/runnext/)
6軸センサーで、ランニング中の体の動きを正確に測定。メガネで測定したデータを解析し、ランニングの無駄や弱点発見をサポート。効率的で、疲れにくく故障しづらい、理想の走りへとあなたを導きます。


* [DRIVE2](https://jins-meme.com/ja/drive/)
JINS MEME メガネの眼電位センサーと6軸センサーが、疲労や眠気に伴うまばたき・視線の変化と頭の動きも捕捉。ドライバーの覚醒度の変化を検知し、アプリを通じて眠気の可能性を画面と音声でお知らせ。毎日の通勤から週末のファミリードライブまで、あなたの安全運転をアシストします。

## 解説
##### 認可コードの取得
Getリクエストでトークン取得用の認可コードを取得します。
下記のコードをchromeのアドレスバーに張り付けてください。
`https://accounts.jins.com/jp/ja/oauth/authorize?response_type=code&client_id=XXXXXXXXXXXX&redirect_uri=http://google.com&state=hoge&scope=office%20run%20drive&service_id=meme`

client_idとredirect_uriは適宜書き換えてください。
redirect_uriはJINS MEME DEVELOPERS登録時に記入したURIを記載。(今回はhttp://google.com)

成功するとリダイレクト先に飛ばされ、クエリパラメータに認可コードとstateが入っています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169001/794036cf-acb1-1bc6-0d4e-cd8b7ecd2e30.png)


##### アクセストークンの取得
認可コードを使ってアクセストークンを取得します。
次はPOSTリクエストのため、RESTクライアントを使用します。
・MethodにPOST
・ReqestURLにhttps://apis.jins.com/meme/v1/oauth/token
・HeaderNameにContent-Type
・Headervalueにapplication/x-www-form-urlencoded
を指定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169001/6fb837be-f5e8-abc5-9ef2-be4dd8c817d3.png)

Bodyタブに移動し
・grant_typeにauthorization_code
・codeに先ほど取得した認可コード
・redirect_uriにhttp://google.com
・client_idにDEVELOPERS登録時のアプリID
・client_secretにDEVELOPERS登録時のアプリSecret
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169001/ced1c9c7-667d-6aa0-6a72-9666f9be36d8.png)

SENDボタンを押して正しく入力されていれば
アクセストークンが返ってきます。

```json
{
    "access_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "token_type": "bearer",
    "expires_in": 2592000,
    "refresh_token": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "scope": "office run drive"
}
```

##### パーソナルデータの取得
アクセストークンまで取得出来たら最後にデータをGetでとってきます。
`https://apis.jins.com/meme/v1/users/me/drive2/computed_data?type=computed_data2&date_from=2018-06-17T00%3A00%3A00%2B00%3A00&date_to=2018-06-17T23%3A59%3A59%2B00%3A00`

クエリパラメータはdate_fromとdate_toが必須、項目数が多いのでオプションでfieldsを指定することで絞ることもできます。
date_**は`YYYY-MM-DDThh:mm:ssTZD`の書式で指定します。コロンとプラス記号はエンコードし%3A,%2Bになります。
例)2019年1月2日3時4分5秒(日本時間)→2019-01-02T03:04:05+09:00→2019-01-02T03%3A04%3A05%2B09%3A00

ヘッダには
・acceptにapplication/json
・authorizationにBearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX(アクセストークン)
を指定し、SENDボタンを押します
![image.png](https://qiita-image-store.s3.amazonaws.com/0/169001/780c3b81-8d2d-c203-c784-6940e9587a8f.png)


## 結果
うまくいくとこんな感じでデータが取れます。

```json
{
  "computed_data": {
    "12": [
      {
        "date": "2018-06-17T12:20:15Z",
        "cat": 11,
        "r_bk": 58,
        "r_eu": 24,
        "r_ed": 36,
        "r_er": 26,
        "r_el": 38,
        "nd": 4,
        "stp": 2,
        "nptm_b": 0.0154,
        "npts_b": 0.0147,
        "nptm_a": 0.0154,
        "npts_a": 0.0147,
        "vpwm_a": 0,
        "bkil": 0,
        "bkir": 0,
        "p_vld": 1,
        "m_npt": 0.0395,
        "m_npt_c": 0.0395,
        "m_npt_cl": 0.0182,
        "m_bki": 0,
        "m_vpw": 0.1099,
        "bk": 2,
        "d_ivd": 0,
        "npt_t": 65.1,
        "npt_ts": 65.1,
        "npt_tl": 52,
        "ss_t": 0,
        "bts_t": 0,
        "lb_t": 0,
        "npt": 38.5,
        "npt_d": 29.6,
        "spn": 29.6,
        "lng": 135.69193,
        "lat": 34.88692,
        "spd": 0.7,
        "hmc": 20,
        "til": 0.6,
        "wtr": "100",
        "in_mes": 0,
        "dist": 0,
        "isl": false
      },
      {
        "date": "2018-06-17T12:18:45Z",
        "cat": 10,
        "r_bk": 14,
        "r_eu": 6,
        "r_ed": 4,
        "r_er": 3,
        "r_el": 4,
        "nd": 0,
        "stp": 1,
        "nptm_b": 0.0085,
        "npts_b": 0.0052,
        "nptm_a": 0.0085,
        "npts_a": 0.0052,
        "vpwm_a": 0,
        "bkil": 0,
        "bkir": 0,
        "p_vld": 0,
        "m_npt": 0,
        "m_npt_c": 0,
        "m_npt_cl": 0,
        "m_bki": 0,
        "m_vpw": 0,
        "bk": 0,
        "d_ivd": 1,
        "npt_t": 0,
        "npt_ts": 0,
        "npt_tl": 0,
        "ss_t": 0,
        "bts_t": 0,
        "lb_t": 0,
        "npt": 0,
        "npt_d": 29.6,
        "spn": 29.2,
        "lng": 135.69193,
        "lat": 34.88692,
        "spd": 1.7,
        "hmc": 2,
        "til": -6.9,
        "wtr": "100",
        "in_mes": 0,
        "dist": 0,
        "isl": false
      }
    ]
  },
  "cursor": null
}
```

ちなみにアプリからみるとこんな感じです。
<img src="https://qiita-image-store.s3.amazonaws.com/0/169001/8ffbe191-8e04-0790-d5ea-26f13c800991.png" width=50%>
<img src="https://qiita-image-store.s3.amazonaws.com/0/169001/9ae54444-d65e-dc98-6335-c1daee7dd8a0.jpeg" width=50%>

## つぎ
Androidアプリを作る予定だったんですがコケまくりで記事にもならないのでWebAPIを使ってみました。
サポートへメールを投げたので返事待ちです。