def fitbit_activity(user_id): """ 存储今天的 activity 记录 API: https://dev.fitbit.com/build/reference/web-api/activity/ """ user = load_user(user_id) oauth = get_user_oauth(user=user, provider='fitbit') if not oauth: return jsonify({'msg': 'Unauthorized'}) fitbit = Fitbit(client_id=os.getenv('FITBIT_APP_ID'), client_secret=os.getenv('FITBIT_SECRET'), access_token=oauth.token['access_token'], refresh_token=oauth.token['refresh_token'], refresh_cb=actions.fitbit_refresh_cb) dt_str = request.args.get('datetime') dt = pendulum.parse(dt_str, strict=False) # 如果 token 失效更新 token if is_token_expired(dt, oauth.token): new_token = fitbit.client.refresh_token() app.logger.info('=== {} new_token: {}'.format(user.username, new_token)) actions.update_oauth_token(oauth, new_token) # 获取 activity data = fitbit.activities(date=dt.date(), user_id=oauth.provider_user_id) print('==== activities from fitbit') print(data) query = models.Activity.query.filter_by(user=user, date=dt.date()) try: activities = query.one() activities.data = data db.session.add(activities) db.session.commit() except NoResultFound: # 存储 activity activities = models.Activity(user=user, data=data, date=dt.date()) db.session.add(activities) db.session.commit() result = activities.data['summary'] for distance in result['distances']: if distance['activity'] == 'total': result['distances'] = distance['distance'] break return jsonify(result)