示例#1
0
文件: api.py 项目: neha-ojha/GoActiv
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