【问题标题】:Tweepy: How can I look up more than 100 user screen namesTweepy:如何查找超过 100 个用户的屏幕名称
【发布时间】:2017-10-02 15:12:22
【问题描述】:

您只能使用retrieve 100 user objects per request api.lookup_users() 方法。有没有一种简单的方法可以使用 Tweepy 和 Python 检索超过 100 个?我读过这篇文章:User ID to Username tweepy 但它对解决 100 多个问题没有帮助。我是 Python 的新手,所以我自己无法提出解决方案。我试过的是这样的:

users = []
i = 0
num_pages = 2
while i < num_pages:
    try:
        # Look up a collection of ids
        users.append(api.lookup_users(user_ids=ids[100*i:100*(i+1)-1]))
    except tweepy.TweepError:
        # We get a tweep error
        print('Something went wrong, quitting...')
    i = i + 1

其中ids 是一个包含ID 的列表,但是当我尝试获取索引高于100 的用户时,我得到IndexError: list index out of range。如果它有帮助,我只对从用户ID 获取屏幕名称感兴趣。

【问题讨论】:

    标签: python twitter tweepy


    【解决方案1】:

    您需要将推文以 100 条为一组发送到 API 是对的,但您忽略了这样一个事实,即您可能没有确切的 100 条推文的倍数。请尝试以下操作:

    import tweepy
    
    def lookup_user_list(user_id_list, api):
        full_users = []
        users_count = len(user_id_list)
        try:
            for i in range((users_count / 100) + 1):
                full_users.extend(api.lookup_users(user_ids=user_id_list[i*100:min((i+1)*100, users_count)]))
            return full_users
        except tweepy.TweepError:
            print 'Something went wrong, quitting...'
    
    results = lookup_user_list(ids, api)
    

    通过取results = lookup_user_list(user_ids, main_api) 的最小值,我们确保最后的循环只剩下用户。 results 将是查找用户的列表。

    您也可能会遇到速率限制 - 在设置 API 时,您应该注意让 tweepy 优雅地捕捉这些并消除一些繁重的工作,如下所示:

    consumer_key = 'X'
    consumer_secret = 'X'
    access_token = 'X'
    access_token_secret = 'X'
    
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
    

    【讨论】:

      【解决方案2】:

      我没有测试它,因为我无权访问 API。
      但是,如果您有任何范围内的用户 ID 集合,则应该获取所有用户 ID。

      它首先获取任何余数,这意味着如果您有一个包含 250 个 ID 的列表,它将获取列表中最后 50 个 ID 的 50 个用户。
      然后它将以数百个批次获取剩余的 200 个用户。

      from tweepy import api, TweepError
      
      users = []
      user_ids = []  # collection of user ids
      count_100 = int(len(user_ids) / 100)  # amount of hundred user ids
      
      if len(user_ids) % 100 > 0:
          for i in range(0, count_100 + 1):
              try:
                  if i == 0:
                      remainder = len(user_ids) % 100
                      users.append(api.lookup_users(user_ids=user_ids[:-remainder]))
                  else:
                      end_at = i * 100
                      start_at = end_at - 100
                      users.append(api.lookup_users(user_ids=user_ids[start_at:end_at]))
      
               except TweepError:
                   print('Something went wrong, quitting...')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-15
        • 2018-05-12
        • 2018-04-19
        • 2018-03-26
        • 2017-08-14
        • 2012-08-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多