概要
アイドルグループ・・・・・・・・・は、アイドルの生体情報を計測し、毎日ツイートする企画「今日の生体情報」を実施した。
第13回定期公演「Tokyo in Bio」
— ・・・・・・・・・ (@dotstokyo) 2018年7月25日
今日の生体情報です!
Tokyo in Bioの概要と楽しみ方のヒント👇https://t.co/iV0Du2WdHT#Tokyo_in_Bio#今日の生体情報#NokiaSleep pic.twitter.com/LcVAYrHCZS
実際のツイートは以下から確認できる
from:dotstokyo #今日の生体情報 - Twitter検索
本記事では、企画内容と、企画の実施主体である・・・・・・・・・を紹介したあと、
- 計測に使用した機材、Nokia Sleep, Nokia Body+の概要
- Nokia Sleep, Nokia Body+が計測したデータのうち、「APIでアクセスできるデータ」「APIでアクセスできないデータ」のリスト
- Nokia Sleep, Nokia Body+が計測したデータに、Nokia Health APIを使ってアクセスする方法
を示す。
企画内容
- Nokia Sleepで、アイドルの「眠りの長さと深さ」を毎日計測する
- 計測した睡眠データをチャートに起こす
- Nokia Body+で、アイドルの「筋肉量・水分量・骨量」を毎日計測する
- 計測した体組成データを表に起こす
- 以上二点の画像を、毎日ツイートする
コンセプト
- 普段どおりの生活を送っているだけでコンテンツが生成される仕組みづくり
- 「他者への介入と、介入を受けての振る舞いの変化、そのフィードバックループによって進化していく生態系」であるTwitterで、あえて、人の意思では操作困難な身体のシグナルを発信する
- 身体によるツイート
- 人格を有したヒトによるツイート、人格を有さない機械によるツイート、人格を有した機械によるツイートが入り乱れるTwitter空間に、「ヒト」×「非人格」という新たな切り口を提供する
人格 | 非人格 | |
---|---|---|
ヒト | きゃりーぱみゅぱみゅ(@pamyurin) | 今日の生体情報(@dotstokyo) |
機械 | りんな(@ms_rinna) | 気温bot(関東)(@__BQ) |
・・・・・・・・・
- ・・・・・・・・・はおもに東京で活動をしているアイドルグループ
- グループの正式な呼び名はなく、人それぞれ「ドッツトーキョー」「てんきゅー」など思い思いの呼び方をしている
- メンバーの名前は全員「・」。ファンからは「・ちゃん」と呼ばれている
- メンバーはサングラスのようなもので顔が隠れている
- さまざまなテクノロジー企画を実施している
・・・・・・・・・は過去にも、プロダクトや企画で生体情報を用いている。
- アイドルの睡眠データを3Dプリンタでオブジェ化して日本武道館で展示する
- 睡眠データを計測するのにFitbitを使用
- アイドルのリアルタイム心拍を転送、心拍数に合わせてファンのスマホが震えるアプリ
- 心拍数の計測にはmioFuseを使用
・・・・・・・・・についてのさらなる情報は、以下のページを参照。
・・・・・・・・・について
Nokia Sleep
- Nokiaが販売している、敷きパッド型の睡眠トラッカー
- Fitbitなどの腕時計型トラッカーと異なり、わざわざ寝る前に装着する必要がない
- 普通に生活してるだけで睡眠情報を計測できる
Nokia Health APIでアクセスできるデータ
Sleep - v2 Get
眠りの深さ
value | state | 状態 |
---|---|---|
0 | awake | 目覚めている状態 |
1 | light sleep | 浅い睡眠 |
2 | deep sleep | 深い睡眠 |
3 | REM sleep | とても浅い睡眠(レム睡眠) |
Sleep - v2 Getsummary
睡眠の概要
wakeupduration | (ベッドの中で)起きていた時間(秒) |
lightsleepduration | 浅い睡眠の時間(秒) |
deepsleepduration | 深い睡眠の時間(秒) |
remsleepduration | とても浅い睡眠(レム睡眠)の時間(秒) |
durationtosleep | ベッドに入ってから、眠るまでの時間(秒) |
durationtowakeup | 目覚めた後、ベッドから出るまでの時間(秒) |
wakeupcount | 睡眠が中断された回数 |
Nokia Health APIでアクセスできないデータ
計測しているが、Nokia Health APIからはアクセスできないデータ
- 睡眠スコア
- 規則性
- 睡眠時心拍数
- いびきの長さ
- 呼吸数
このうち、睡眠時心拍数・いびきの長さ・呼吸数は、Nokia HealthダッシュボードからCSV形式でダウンロードできる。
ダッシュボード
https://dashboard.health.nokia.com/
Nokia Body+
- Nokiaが販売している体組成計
Nokia Health APIでアクセスできるデータ
Measure - Getmeas
value | meastype | 種類 |
---|---|---|
1 | Weight(kg) | 体重 |
5 | Fat Free Mass (kg) | 除脂肪体重 |
6 | Fat Ratio (%) | 体脂肪率 |
8 | Fat Mass Weight (kg) | 体脂肪量 |
76 | Muscle Mass | 筋肉率 |
77 | Hydration | 水分量 |
88 | Bone Mass | 骨量 |
Nokia Health APIでアクセスできないデータ
なし
Nokia Health API
Nokia製品で計測したデータにアクセスできるAPI
このAPIをご使用いただくことで、開発者の方々は、体重、体脂肪、アクティビティ、睡眠、血圧、心拍数など、Nokia製品で測定された健康データにアクセスし、それらを開発者様のサービスに統合したり、全く新しい革新的なユーザー体験を作成したりできます。
https://health.nokia.com/jp/ja/developers
ドキュメント
Nokia Health API developer documentation
以下、Nokia Health APIを使って、Nokia Sleep, Nokia Body+が計測したデータにアクセスする手順を示す。
下準備
- Nokia Healthアカウントを取得
- 以下のページを参考にNokia Sleep, Nokia Body+とスマートフォンをペアリング
- Nokia Sleepのセットアップ – Nokia
- Nokia Body+ - 体重計をインストールする - iOS手順 – Nokia
- Nokia Body+ - 体重計をインストールする - Android手順 – Nokia
アプリ登録(client id, consumer secretの取得)
- アプリを登録
- 登録するとclient idとconsumer secretが表示されるので、控えておく
access tokenの取得
access tokenとは
- 有効期限は4時間
- access tokenを使うことで、Nokia Health APIにアクセスできる
- refresh tokenを使ってリフレッシュできる
refresh tokenとは
- 有効期限は1年間
- access tokenをリフレッシュするために使われる
- リフレッシュすると、新しいrefresh tokenが返される。古いものは4時間後に失効する
authentication codeの取得
OAuth 2.0 - Get your authentication code
ベースURLにパラメーターを付与して、ブラウザからアクセスする。
https://account.withings.com/oauth2_user/authorize2
パラメーター
- response_type
- "code"
- client_id
- state
- サイトやアプリにリダイレクトされたものが偽装されていないことを確認するために使用
- 必須ではないが、なぜか付け足さないとユーザー同意画面に飛べなかった
- scope
- アクセスできるデータの範囲
- 詳細→ Scopes
- redirect_uri
- アプリ登録で記入したコールバックURL
本企画の場合、最終的なURLはこのようになった
https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=クライアントID&state=hoge&scope=user.metrics,user.activity&redirect_uri=http://localhost:4567/oauth/callback
このURLにアクセスすると、ユーザー同意画面が表示される。
「このアプリを許可する」を選ぶと、authentication codeが付与されたコールバックURLにリダイレクトされる。
http://localhost:4567/oauth/callback?code=オーセンティケーションコード&state=hoge
access tokenの取得
OAuth 2.0 - Get your access token
authentication codeを使って、access tokenを取得する。
以下は、Python3.6.1での例。
def get_accesstoken(client_id, client_secret, code, redirect_uri):
url = "https://account.withings.com/oauth2/token"
payload = {
"grant_type": "authorization_code",
"client_id": client_id,
"client_secret": client_secret, # consumer secretのこと
"code": code, # authentication codeのこと
"redirect_uri": redirect_uri
}
r = requests.post(url, data=payload)
return r.json()
レスポンスにaccess tokenとrefresh tokenが含まれている。
{'access_token': ‘アクセストークン’, 'expires_in': '10800', 'token_type': 'Bearer', 'scope': 'user.metrics,user.activity', 'refresh_token': ‘リフレッシュトークン’, 'userid': ‘ユーザーID’}
access tokenのリフレッシュ
OAuth 2.0 - Refresh your access token
def refresh_accesstoken(client_id, client_secret, refresh_token):
url = "https://account.withings.com/oauth2/token"
payload = {
"grant_type": "refresh_token",
"client_id": client_id,
"client_secret": client_secret,
"refresh_token": refresh_token
}
r = requests.post(url, data=payload)
return r.json()
データへのアクセス
Sleep - v2 Get
def get_sleep(access_token, startdate, enddate):
url = "https://wbsapi.withings.net/v2/sleep?action=get"
payload = {
"access_token": access_token,
"startdate": startdate, # UNIXタイムスタンプで指定
"enddate": enddate # UNIXタイムスタンプで指定
}
r = requests.get(url, params=payload)
return r.json()
Sleep - v2 Getsummary
def get_summary(access_token, startdateymd, enddateymd):
url = "https://wbsapi.withings.net/v2/sleep?action=getsummary"
payload = {
"access_token": access_token,
"startdateymd": startdateymd, # YYYY-MM-DD形式で指定
"enddateymd": enddateymd # YYYY-MM-DD形式で指定
}
r = requests.get(url, params=payload)
return r.json()
Measure - Getmeas
def get_meas(access_token, startdate, enddate):
url = "https://wbsapi.withings.net/measure?action=getmeas"
payload = {
"access_token": access_token,
"startdate": startdate, # UNIXタイムスタンプで指定
"enddate": enddate # UNIXタイムスタンプで指定
}
r = requests.get(url, params=payload)
return r.json()