diff --git a/fitbit/api.py b/fitbit/api.py index ba9d037..6854f14 100644 --- a/fitbit/api.py +++ b/fitbit/api.py @@ -141,9 +141,9 @@ def fetch_access_token(self, code, redirect_uri=None): self.session.redirect_uri = redirect_uri return self.session.fetch_token( self.access_token_url, - username=self.client_id, - password=self.client_secret, - code=code) + auth=HTTPBasicAuth(self.client_id, self.client_secret), + code=code, + ) def refresh_token(self): """Step 3: obtains a new access_token from the the refresh token @@ -618,6 +618,28 @@ def activity_stats(self, user_id=None, qualifier=''): ) return self.make_request(url) + def activity_logs_list(self, user_id=None, before_date=None, after_date=None, offset=0, limit=20): + """ + https://dev.fitbit.com/build/reference/web-api/activity/#get-activity-logs-list + """ + if bool(before_date) == bool(after_date): + raise TypeError("Exactly one of `before_date` and `after_date` must be specified") + + params = { + 'sort': 'desc' if before_date else 'asc', + 'offset': '%d' % offset, + 'limit': '%d' % limit, + } + if before_date: + params['beforeDate'] = before_date + else: + params['afterDate'] = after_date + + url = "{0}/{1}/user/{2}/activities/list.json".format( + *self._get_common_args(user_id), + ) + return self.make_request(url, params=params) + def _food_stats(self, user_id=None, qualifier=''): """ This builds the convenience methods on initialization::