2016-03-10 88 views
1

我有一個關於Instagram API和速率限制的問題 - 以及如何通過訪問令牌循環來解決這個問題。Python Instagram API - 如何通過訪問令牌循環訪問速率限制?

此前,我使用統計軟件程序構建了一個API接口來提取數據並進行手動解析。這是在我意識到Python-Instagram包容易得多之前。

問題:這就是說,我能夠創建一個循環,在達到速率限制時,它將釋放當前的訪問令牌,並循環訪問令牌列表,直到它遇到未使用的請求,然後繼續通過提取。我使用此功能爲特定用戶提供了關注者列表,該用戶擁有超過100萬的關注者。使用Python Instagram API接口,我有麻煩重新創建它。

這裏的起始碼(從python-instagram):

詳盡EXTRACT的追隨者清單給定用戶:

user_followers, next_ = api.user_followed_by(userid) #request data from API 
    while next_: 
    more_user_followers, next_ = api.user_followed_by(with_next_url=next_) #extract the list of followers 
    user_followers.extend(more_user_followers) #append each page of followers into this list with each iteration 

而且這裏是我創造的訪問令牌的循環,直到未使用的嘗試一個被擊中:

counter=0 #set seed counter 

user_followers, next_ = api.user_followed_by(userid) #request data from API 
    while next_: 
     try: 
      more_user_followers, next_ = api.user_followed_by(with_next_url=next_) #extract the list of followers and capture any error codes 
     except InstagramAPIError: 
      counter=counter+1 #upon rate-limit error, increment counter by 1 to call each access token 
      if counter==1: 
       access_token="accesstoken1" 
      if counter==2: 
       access_token="accesstoken2" 
      # etc... 
       counter=0 #for the final access_token in the list, reset counter to 0 to re-start at the top of the list and cycle until a hit is found 
      api=InstagramAPI(access_token=access_token,client_secret=client_secret) #I think this should push the new access_token to the Instagram API constructor, but perhaps this is where the error lies... 
      continue #I think this will break the current cycle and restart under the `while next_:` statement, thus attempting to pull the data using the new access token 
     user_followers.extend(more_user_followers) #append each page of followers into this list with each iteration 

限速誤差可以成功地與try:聲明捕獲,並且循環W¯¯不正確的循環訪問令牌 - 但由於某種原因,這些不會被識別或「推回」Instagram API界面,並且數據不會被拉取。循環只是通過代碼循環。

我知道這是可能的,因爲我已經通過手動請求端點並在達到速率限制錯誤時切換訪問令牌(使用其他軟件包)來完成此操作,但我想要使用Python Instagram API執行此操作。

我最初的想法是,continue中斷不會在適當的上游點重置循環,或者訪問令牌無法在對user_followers, next_ = api.user_followed_by(userid)端點的給定調用中「切換」。

回答

0

最簡單的解決方案 - 隨機取出所有的令牌。 經過多次運行後,統計學上的負載將會幾乎相等。

如果突然其中一人感到筋疲力盡 - 拿下。

import random 
    tokens = ['aaaaa', 'bbbbb', 'cccc', ...] 
    token = random.choice(tokens) 
+0

非常好,這段代碼簡化了訪問令牌循環並分散了用法!很好學習新的東西。 – user812783765