Avoid Twitter API limitation with Tweepy

前端 未结 5 1422
时光说笑
时光说笑 2020-11-30 21:18

I saw in some question on Stack Exchange that the limitation can be a function of the number of requests per 15 minutes and depends also on the complexity of the algorithm,

5条回答
  •  情深已故
    2020-11-30 22:18

    The problem is that your try: except: block is in the wrong place. Inserting data into the database will never raise a TweepError - it's iterating over Cursor.items() that will. I would suggest refactoring your code to call the next method of Cursor.items() in an infinite loop. That call should be placed in the try: except: block, as it can raise an error.

    Here's (roughly) what the code should look like:

    # above omitted for brevity
    c = tweepy.Cursor(api.search,
                           q=search,
                           include_entities=True).items()
    while True:
        try:
            tweet = c.next()
            # Insert into db
        except tweepy.TweepError:
            time.sleep(60 * 15)
            continue
        except StopIteration:
            break
    

    This works because when Tweepy raises a TweepError, it hasn't updated any of the cursor data. The next time it makes the request, it will use the same parameters as the request which triggered the rate limit, effectively repeating it until it goes though.

提交回复
热议问题