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 となっているので、区別できる。