示例#1
0
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'))
示例#2
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