2017-05-04 60 views
0

您只能使用retrieve 100 user objects per requestapi.lookup_users()方法。有沒有簡單的方法來檢索超過100使用Tweepy和Python?我讀過這篇文章:User ID to Username tweepy但它不能解決100多個問題。我是Python的新手,所以我不能自己想出一個解決方案。我曾嘗試是這樣的:Tweepy:如何查找超過100個用戶的屏幕名稱

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的列表,但我得到IndexError: list index out of range,當我試圖讓用戶與指數高於100。如果它幫助我只獲得感興趣來自用戶ID的屏幕名稱。

回答

0

你說的沒錯,你需要的tweet發送到API中的100個批次,但你忽略了一個事實,你可能沒有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) 
0

我沒有測試過,因爲我沒有訪問API。
但是,如果你有任何範圍內的用戶ID的集合,這應該獲取所有這些。

它首先獲取任何餘數,這意味着如果您有一個250個ID的列表,它將獲取50個用戶列表中的最後50個ID。
然後它將以數百批次的方式提取剩餘的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...')