我在网站上看到了一些试图帮助解决这个问题的事情,但我无法确定我做错了什么。或者
这段代码应该是一个关注者列表,但无论我尝试什么,我都会从Twitter API中得到429错误:
def get_follow_list():
next_cursor = -1
while next_cursor != 0:
response = twitter.get_followers_list(screen_name=current_user, cursor=next_cursor)
following = response['users']
follow_list = [following]
time.sleep(1)
cursor = response['next_cursor']
return (follow_list)
我将如何解决此问题?
编辑:给出的答案中的代码很棒,但是在尝试从中打印值时出现此错误:" UnicodeEncodeError:' UCS-2'编解码器不能对位置205571-205571中的字符进行编码:Tk"中不支持非BMP字符。这反过来导致调用GUI类的问题,如前所述。我不确定如何将列表的编码更改为我的应用中的列表框可以处理的内容。
答案 0 :(得分:1)
如Twitter Error Codes and Responses所述,429
响应代码表示Too Many Requests
。因此,错误不在代码语法本身,而在于您在Twitter API上执行的调用数。请查看REST API Rate Limiting文档,了解如何跟踪可以执行的调用次数(尤其是使用X-Rate-Limit-Remaining
和其他HTTP标头)以及rate limiting details for each REST endpoint。
关于如何在前20个结果之后进入分页的问题,请检查using cursors。这里,光标上的条件应为while cursor != 0:
,以便能够转到下一页。然后,它涉及确保您没有对Twitter API进行太多调用。
话虽如此,这是一个更好的解决方案,可以利用GET friends/ids
。这使您可以一次检索5000个用户的ID(而不是20个),并且可以在使用GET users/lookup
之后对其进行水合。这将适用于大量以下内容,而无需在每次单独呼叫之间暂停:
def get_follow_list():
users = []
users_ids = []
# Fetch the followings as a cursored collection (up to 5000 per call).
cursor = -1
while cursor != 0:
response = twitter.get_friends_ids(screen_name=current_user, cursor=cursor)
users_ids += response['ids']
cursor = response['next_cursor']
# Lookup the users by chunks of 100.
for i in range(0, len(users_ids), 100):
chunk = users_ids[i:i + 100]
users += twitter.lookup_user(user_id=chunk)
# Return the user objects.
return (users)