繁体   English   中英

Tweepy:如何查找超过100个用户屏幕名称

[英]Tweepy: How can I look up more than 100 user screen names

使用api.lookup_users()方法, 每个请求只能检索100个用户对象 有没有一种简单的方法可以使用Tweepy和Python检索100多个? 我已经读了这篇文章: 用户名到用户名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是包含ids的列表,但是当我尝试让索引高于100的用户时,我得到IndexError: list index out of range 。如果有帮助,我只对从用户ID获取屏幕名称感兴趣。

由于没有访问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...')

没错,您需要批量发送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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM