def fitbit_sleep(user_id): """ 创建或更新今天的 sleep 记录 API: https://dev.fitbit.com/build/reference/web-api/sleep/ """ 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']) # TODO: 如果没有 datetime 参数处理 dt_str = request.args.get('datetime') dt = pendulum.parse(dt_str, strict=False) sleep_data = fitbit.sleep(date=dt.date(), user_id=oauth.provider_user_id) query = models.Sleep.query.filter_by(user=user, date=dt.date()) try: sleep = query.one() sleep.data = sleep_data db.session.add(sleep) db.session.commit() except NoResultFound: sleep = models.Sleep(user=user, data=sleep_data, date=dt.date()) db.session.add(sleep) db.session.commit() return jsonify(sleep.data['summary'])