这是我第一次使用引导模式询问新问题,如果在这里做错了,我深表歉意。基本上,我首先使用请求库拉出我的所有关注者,该库返回JSON。然后,我想拉出“跟随者ID”并将其逐个插入新的URL,该URL向我显示他们的每个锻炼,然后我想将所有锻炼ID记录到一个长列表中,并在新的URL上循环遍历,锻炼细节并将其存储在熊猫数据框中。
我可以使所有单独的URL正常工作,甚至可以使FOR循环正常工作并打印所有ID。但是,一旦我开始嵌套它们,代码就会完全中断。我也很难将ID存储在某种数据帧中以进行输出,但是最终并不是那么重要。
这就是我拉动并显示所有关注者的方式(至少是他们的ID)
FollowersURL='https://api.onepeloton.com/api/user/935aa28d93794c1f862931de05900ace/followers?limit=5000'
FollowerResults=requests.get(FollowersURL,cookies=s.cookies).json()
for each in FollowerResults['data']:
print (each['id'])
FollowerResults如下所示:
{
'count': 9,
'show_previous': False,
'page_count': 1,
'limit': 5000,
'total_non_pending_followers': 9,
'show_next': False,
'total': 9,
'data': [{
'username': 'NoTimeForBasic',
'authed_user_follows': False,
'total_workouts': None,
'relationship': {
'me_to_user': 'follow_pending',
'user_to_me': 'following'
},
'is_profile_private': True,
'image_url': 'https://peloton-profile-images.s3.amazonaws.com/c85dac00603049628cd08fda7809d7f3ef35586a/1464367429578',
'total_following': None,
'total_followers': None,
'category': 'others',
'id': '079703c6a50a411089283c4500bdfae1',
'location': '#fitfab40s El Cajon, CA'
}, {
'username': 'CWhynock',
'authed_user_follows': True,
'total_workouts': 29,
'relationship': {
'me_to_user': 'following',
'user_to_me': 'following'
},
'is_profile_private': False,
'image_url': 'https://s3.amazonaws.com/peloton-profile-images/f68874d97f5b06322be8213aedcb72f4d6d6b3cb/d16684f4b21542b499093adca1d8144c',
'total_following': 7,
'total_followers': 10,
'category': 'following',
'id': 'fa05ec2c901b4f78b87f783b6cf718d8',
'location': 'GO PATS! '
},
所以我想做的是使用以下URL提取这些用户的锻炼清单中的每一个。我想我已经用以下代码成功完成了此任务:
FollowersURL='https://api.onepeloton.com/api/user/935aa28d93794c1f862931de05900ace/followers?limit=5000'
FollowerResults=requests.get(FollowersURL,cookies=s.cookies).json()
print (FollowerResults)
for each in FollowerResults['data']:
WorkoutListURL='https://api.onepeloton.com/api/user/'+each['id']+'/workouts?limit=5000'
WorkoutList=requests.get(WorkoutListURL,cookies=s.cookies).json()
print (WorkoutList)
JSON结果如下:
{
'count': 389,
'summary': {
'2019-02': 8,
'2018-09': 27,
'2019-01': 37,
'2018-08': 29,
'2018-03': 45,
'2018-02': 16,
'2018-05': 53,
'2018-04': 50,
'2018-07': 35,
'2018-06': 34,
'2018-12': 27,
'2018-10': 16,
'2018-11': 12
},
'page_count': 1,
'show_next': False,
'sort_by': '-created_at,-pk',
'show_previous': False,
'limit': 5000,
'aggregate_stats': [],
'total': 389,
'data': [{
'workout_type': 'class',
'total_work': 414080.72,
'is_total_work_personal_record': False,
'device_type': 'home_bike_v1',
'has_pedaling_metrics': True,
'id': '8aba8dcb693b46819f02217794f3a3a8',
'fitbit_id': None,
'peloton_id': '1bfa71c672a640d9bedae63d28b4b3be',
'user_id': '145d2324238e4cd992651b57f8bf0c47',
'title': None,
'has_leaderboard_metrics': True,
'device_time_created_at': 1549910418,
'platform': 'commercial_bike',
'metrics_type': 'cycling',
'fitness_discipline': 'cycling',
'status': 'COMPLETE',
'start_time': 1549928479,
'name': 'Cycling Workout',
'strava_id': None,
'created': 1549928418,
'created_at': 1549928418,
'end_time': 1549931177
}, {
'workout_type': 'freestyle',
'total_work': 223051.5,
'is_total_work_personal_record': False,
'device_type': 'home_bike_v1',
'has_pedaling_metrics': True,
'id': '8dff473932d043ef9b9d066ca347e072',
'fitbit_id': None,
'peloton_id': None,
'user_id': '145d2324238e4cd992651b57f8bf0c47',
'title': '44 min 17 sec Just Ride',
'has_leaderboard_metrics': False,
'device_time_created_at': 1549571978,
'platform': 'home_bike',
'metrics_type': 'cycling',
'fitness_discipline': 'cycling',
'status': 'COMPLETE',
'start_time': 1549589978,
'name': 'Cycling Workout',
'strava_id': None,
'created': 1549589978,
'created_at': 1549589978,
'end_time': 1549592635,
'ride': {
'scheduled_start_time': 1549589978,
'title': '44 min 17 sec Just Ride',
'is_archived': False,
'duration': 2657,
'instructor': {
'image_url': 'https://s3.amazonaws.com/peloton-ride-images/just-ride.png',
'name': 'JUST RIDE'
},
所以现在这是它开始崩溃的地方。我想做另一层,从锻炼列表中抓取ID,然后为每个锻炼ID运行以下URL:这是一个锻炼细节示例:
https://api.onepeloton.com/api/workout/c66d130f75ec4ec398954ebf6eb6e51e
因此,在获得这些ID的列表之后,我需要将它们放在上面的URL中,然后将结果存储在pandas数据框中。
当我尝试以下操作时,它不起作用:
FollowersURL='https://api.onepeloton.com/api/user/935aa28d93794c1f862931de05900ace/followers?limit=5000'
FollowerResults=requests.get(FollowersURL,cookies=s.cookies).json()
print (FollowerResults)
for each in FollowerResults['data']:
WorkoutListURL='https://api.onepeloton.com/api/user/'+each['id']+'/workouts?limit=5000'
WorkoutList=requests.get(WorkoutListURL,cookies=s.cookies).json()
for each in WorkoutList['data']:
print (each['id'])
错误:
KeyError:“数据”
但是,我知道JSON结果中有一个数据密钥。我在这里完全错过了什么吗?
此外,如果有更好的方法,我愿意采取另一种方法。谢谢。
答案 0 :(得分:0)
在此处查看此仓库,您应该可以弄清楚问题所在。这里有一些文档化的API,还有比这更多的API,但是我不希望Peloton在公众眼中关闭对它们的访问。
这不是开放的API,因此他们可以随时更改其行为。
https://github.com/geudrik/peloton-api/blob/3ead4b04d0cdaeca129b94240bbeea5ecb235959/API_DOCS.md