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

Posted by user2715478 on Stack Overflow See other posts from Stack Overflow or by user2715478
Published on 2014-05-27T21:20:53Z Indexed on 2014/05/27 21:24 UTC
Read the original article Hit count: 311

Filed under:
|
|
|

I want to handle the Search-API rate limit of 180 requests / 15 minutes. The first solution I came up with was to check the remaining requests in the header and wait 900 seconds. See the following snippet:

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

But it seems, that the header information are not reseted to 180 after it reached the two remaining requests.

The second solution I came up with was to handle the twython exception for rate limitation and wait the remaining amount of time:

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)

But with this solution I receive this message INFO: Resetting dropped connection: api.twitter.com" and the loop will not continue with the last element of the generator. Have somebody faced the same problems?

Regards.

© Stack Overflow or respective owner

Related posts about python

Related posts about python-3.x