diff --git a/fitbit/api.py b/fitbit/api.py index 03e33bd..1c40df9 100644 --- a/fitbit/api.py +++ b/fitbit/api.py @@ -53,11 +53,13 @@ def make_request(self, url, data={}, method=None, **kwargs): """ if not method: method = 'POST' if data else 'GET' + headers = kwargs.pop('headers', {}) request = oauth.Request.from_consumer_and_token(self._consumer, self._token, http_method=method, http_url=url, parameters=data) request.sign_request(self._signature_method, self._consumer, self._token) + headers.update(request.to_header()) response = self._request(method, url, data=data, - headers=request.to_header()) + headers=headers) if response.status_code == 401: raise HTTPUnauthorized(response) @@ -185,6 +187,9 @@ def __init__(self, consumer_key, consumer_secret, system=US, **kwargs): setattr(self, 'delete_%s' % resource, curry( self._DELETE_COLLECTION_RESOURCE, resource)) + for parameter in ['weight', 'fat']: + setattr(self, 'get_body_%s' % parameter, curry(self._LOGGED_RESOURCE, parameter)) + for qualifier in self._qualifiers: setattr(self, '%s_activities' % qualifier, curry(self.activity_stats, qualifier=qualifier)) setattr(self, '%s_foods' % qualifier, curry(self._food_stats, @@ -247,6 +252,47 @@ def user_profile_update(self, data): self.API_VERSION) return self.make_request(url, data) + def _LOGGED_RESOURCE(self, resource, date=None, period=None, end_date=None, user_id=None): + """ + Get logged entries for weight and fat: + + https://wiki.fitbit.com/display/API/API-Get-Body-Fat + GET //user/-/body/log/fat/date/. + GET //user/-/body/log/fat/date//. + GET //user/-/body/log/fat/date//. + + https://wiki.fitbit.com/display/API/API-Get-Body-Weight + GET //user/-/body/log/weight/date/. + GET //user/-/body/log/weight/date//. + GET //user/-/body/log/weight/date//. + """ + if not date: + date = datetime.date.today() + + if not user_id: + user_id = '-' + + if period is None and end_date is None: + url = "%s/%s/user/%s/body/log/%s/date/%s.json" % ( + self.API_ENDPOINT, + self.API_VERSION, + user_id, + resource, + date, + ) + if end_date is not None or period is not None: + to = end_date if end_date is not None else period + url = "%s/%s/user/%s/body/log/%s/date/%s/%s.json" % ( + self.API_ENDPOINT, + self.API_VERSION, + user_id, + resource, + date, + to, + ) + + return self.make_request(url) + def _COLLECTION_RESOURCE(self, resource, date=None, user_id=None, data=None): """