【问题标题】:429 error while fetching Twitter follows for a user using Twython为使用 Twython 的用户获取 Twitter 关注时出现 429 错误
【发布时间】:2014-03-19 01:27:44
【问题描述】:

我在网站上看到了一些试图帮助解决这个问题的东西,但我无法确定自己做错了什么。

这段代码应该获取关注者列表,但无论我尝试什么,我都会从 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' codec can't encode characters in position 205571-205571: Non-BMP Tk 中不支持的字符”。这反过来又会导致调用 GUI 类的问题,如前所述。我不确定如何将列表的编码更改为我的应用中的列表框可以处理的内容。

【问题讨论】:

    标签: python twitter twython


    【解决方案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。这使您能够检索您关注的用户的 id,一次 5000 个(而不是 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)
    

    【讨论】:

    • 我知道这一点,但这并不能帮助我想吸引下一个/最后 20 个人关注。
    • @bricky149 我在上面的回复中更新了您的分页不起作用的原因,以及使用不同 API 端点收集您关注的用户的更有效的代码示例。
    • 感谢您清理它,但我现在遇到了另一个问题。代码现在会导致错误:“_tkinter.TclError: character U+1f44d is above the range (U+0000-U+FFFF) allowed by Tcl”由调用 GUI 类引起。
    猜你喜欢
    • 2011-08-23
    • 2013-09-22
    • 2022-06-22
    • 2014-07-25
    • 2015-05-19
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多