簡體   English   中英

twython搜索api速率限制:標頭信息將不會更新

[英]twython search api rate limit: Header information will not be updated

我想處理180個請求/ 15分鍾的Search-API速率限制。 我想到的第一個解決方案是檢查標頭中的其余請求,然后等待900秒。 請參見以下代碼段:

results = search_interface.cursor(search_interface.search, q=k, lang=lang, result_type=result_mode)

while True:
    try:
        tweet = next(results)
        if limit_reached(search_interface):
            sleep(900)

        self.writer(tweet)


def limit_reached(search_interface):
    remaining_rate = int(search_interface.get_lastfunction_header('X-Rate-Limit-Remaining'))
    return remaining_rate <= 2

但是,似乎報頭信息在到達其余兩個請求后並未重置為180。

我想到的第二個解決方案是處理twython異常以進行速率限制並等待剩余時間:

results = search_interface.cursor(search_interface.search, q=k, lang=lang, result_type=result_mode)
while True:
    try:
        tweet = next(results)

        self.writer(tweet)
    except TwythonError as inst:
        logger.error(inst.msg)
        wait_for_reset(search_interface)
        continue
    except StopIteration:
        break


def wait_for_reset(search_interface):
      reset_timestamp = int(search_interface.get_lastfunction_header('X-Rate-Limit-Reset'))
      now_timestamp = datetime.now().timestamp()
      seconds_offset = 10

      t = reset_timestamp - now_timestamp + seconds_offset
      logger.info('Waiting {0} seconds for Twitter rate limit reset.'.format(t))
      sleep(t)

但是通過這種解決方案,我收到此信息INFO:重置斷開的連接:api.twitter.com”,並且該循環將不會繼續使用生成器的最后一個元素。有人遇到過同樣的問題嗎?

問候。

只是限制自己是我的建議(假設您不斷達到限制...)

QUERY_PER_SEC = 15*60/180.0  #180 per 15 minutes
#~5 seconds per query
class TwitterBot:
    last_update=0
    def doQuery(self,*args,**kwargs):
        tdiff = time.time()-self.last_update
        if tdiff < QUERY_PER_SEC:
            time.sleep(QUERY_PER_SEC-tdiff) 
        self.last_update = time.time()
        return search_interface.cursor(*args,**kwargs)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM