fitbitエクササイズデータ (TCX) を列挙する
log_idさえ分かればTCXデータが入手できることは分かった。あとはエクササイズデータの一覧の入手ができるか、が問題。
Activity & Exercise Logs — Fitbit Web API Docs で一定期間の log_id が入手できるようだ。
python-fitbit には、この API 呼び出しに対応する python メソッドは定義されていないので拡張しよう。 そのためには requests モジュールの Session.request() というメソッドの仕様を調べないと、どうやってURL末尾パラメータを埋め込むのか分からない。
Requests: 人間のためのHTTP — requests-docs-ja 1.0.4 documentation をざっと調べる。params 引数に key-value ペアを入れればURL末尾にエンコードしてくれるとのことなので、以下のような activity_logs_list() を作ってみた。
def activity_logs_list(self, user_id=None, before_date=None, after_date=None, limit=20): """ * https://dev.fitbit.com/docs/activity/#get-activity-logs-list Parameters ---------- before_date : str The date in the format yyyy-MM-ddTHH:mm:ss. Only yyyy-MM-dd is required. Either before_date or after_date must be specified. after_date : str The date in the format yyyy-MM-ddTHH:mm:ss. Only yyyy-MM-dd is required. Either before_date or after_date must be specified. limit : number The max of the number of entries returned (maximum: 20). Return ------ json : JSON JSON object representing the list. """ if not((isinstance(before_date, str) and after_date is None) or \ (isinstance(after_date, str) and before_date is None)): raise ValueError('either before_date or after_date is required') if isinstance(before_date, str): sort = 'desc' else: sort = 'asc' url = "{0}/{1}/user/{2}/activities/list.json".format( *self._get_common_args(user_id) ) params = { 'beforeDate' : before_date, 'afterDate' : after_date, 'sort' : sort, 'limit' : limit, 'offset' : 0 } return self.make_request(url, params=params)
テストコードからこのメソッドを呼び出してみる。下図のようにきちんとリストが取得できた。 activities というリストにアクティビティが列挙されている。
さらに、2016/12/21 の朝 7:30 あたりからおこなったジョギングのデータは、下図のように 見えている。この logType が mobile_run となっているものが、明示的にジョギングを記録した エントリーだ。自動計測されたものは logType = auto_detected となっているので、区別できる。