def fitbit_auth(): token = None error = None client_id = '227XNF' client_secret = '1a53508ac0bd0aa5ffa3a9f6de07cb9d' redirect_uri = ('https://%s/project/default/fitbit_auth' % request.env.http_host) code = request.vars.code oauth = FitbitOauth2Client(client_id, client_secret) print code try: token = oauth.fetch_access_token(code, redirect_uri) except MissingTokenError: error = 'Missing access token parameter.</br>Please check that you are using the correct client_secret' except MismatchingStateError: error ='CSRF Warning! Mismatching state' print token client = Fitbit(client_id, client_secret, access_token=token["access_token"], refresh_token=token["refresh_token"]) f_id = db.fitbit_user_t.insert( user_email=auth.user.email, fitbit_user_id=token["user_id"], access_token=token["access_token"], refresh_token=token["refresh_token"], expires_at=token["expires_at"], ) user = client.user_profile_get() goals = client.activities_daily_goal() wt_goal = client.body_weight_goal() print wt_goal u_id = db.user_t.insert( user_email=auth.user.email, dob=user["user"]["dateOfBirth"], sex=user["user"]["gender"], height=user["user"]["height"], image=user["user"]["avatar150"], steps_target=goals["goals"]["steps"], weight_target=wt_goal["goal"]["weight"], weight=user["user"]["weight"], ) redirect(URL('index'))
def maybe_sync_data_from_fitbit(): r = db(db.fitbit_user_t.user_email == auth.user.email).select(db.fitbit_user_t.ALL) if len(r) == 0: return False else: if time.time() > r[0].expires_at: oauth = OAuth2Session(client_id) token = oauth.refresh_token( refresh_token_url, refresh_token=r[0].refresh_token, auth=requests.auth.HTTPBasicAuth(client_id, client_secret) ) r = db(db.fitbit_user_t.user_email == auth.user.email).update(access_token = token["access_token"], refresh_token = token["refresh_token"], expires_at = token["expires_at"]) r = db(db.fitbit_user_t.user_email == auth.user.email).select(db.fitbit_user_t.ALL) client = Fitbit(client_id, client_secret, access_token=r[0].access_token, refresh_token=r[0].refresh_token) user = client.user_profile_get() act = client.activity_stats() steps = client.time_series(resource="activities/steps", period="7d") wt_goal = client.body_weight_goal() day = time.gmtime().tm_wday day_list = [0, 1, 2, 3, 4, 5, 6] new_day_list = day_list[day+1:] + day_list[:day+1] row_dict = {} row_dict["user_email"] = auth.user.email week_val = 0 for idx, day in enumerate(new_day_list): step_val = int(steps['activities-steps'][idx]['value']) row_dict["d" + str(day)] = step_val week_val = week_val + step_val row_dict["week_total"] = week_val row_dict["lifetime"] = act["lifetime"]["total"]["steps"] row_dict["last_updated_day"] = day u = db.user_t(db.user_t.user_email == auth.user.email).update(weight=user["user"]["weight"], weight_target=wt_goal["goal"]["weight"]) s = db.steps_t.update_or_insert((db.steps_t.user_email == auth.user.email), **row_dict) return True