]> jfr.im git - z_archive/twitter.git/commitdiff
Fixed broken rate limiting error handling in archiver/follow.
authorEdi Bice <redacted>
Thu, 20 Mar 2014 17:21:10 +0000 (13:21 -0400)
committerEdi Bice <redacted>
Thu, 20 Mar 2014 17:21:10 +0000 (13:21 -0400)
Twitter changed rate limiting response objects quite a bit in v1.1.
In addition there were bugs due to import of time module and time object from datetime module.

setup.py
twitter/archiver.py
twitter/follow.py

index 57b37acd5427a7b93dfd05b19421c62849d7cabc..9716813e350740c3cd1acf92216bd2ca99f1be39 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from setuptools import setup, find_packages
 import sys, os
 
-version = '1.14.1'
+version = '1.14.2'
 
 install_requires = [
     # -*- Extra requirements: -*-
index 641329ed7d993eb07230a529ba17f73b86c3c2cb..4075409e62a1ede40c1784a49d6e53b11f5dde27 100644 (file)
@@ -242,15 +242,15 @@ def statuses(twitter, screen_name, tweets, mentions=False, favorites=False, rece
                 err("Fail: %i Unauthorized (tweets of that user are protected)"
                     % e.e.code)
                 break
-            elif e.e.code == 400:
+            elif e.e.code == 429:
                 err("Fail: %i API rate limit exceeded" % e.e.code)
-                rate = twitter.application.rate_limit_status()
-                reset = rate['reset_time_in_seconds']
-                reset = time.asctime(time.localtime(reset))
-                delay = int(rate['reset_time_in_seconds']
-                            - time.time()) + 5 # avoid race
-                err("Hourly limit of %i requests reached, next reset on %s: "
-                    "going to sleep for %i secs" % (rate['hourly_limit'],
+                rls = twitter.application.rate_limit_status()
+                reset = rls.rate_limit_reset
+                reset = _time.asctime(_time.localtime(reset))
+                delay = int(rls.rate_limit_reset
+                            - _time.time()) + 5 # avoid race
+                err("Interval limit of %i requests reached, next reset on %s: "
+                    "going to sleep for %i secs" % (rls.rate_limit_limit,
                                                     reset, delay))
                 fail.wait(delay)
                 continue
@@ -285,12 +285,12 @@ def statuses(twitter, screen_name, tweets, mentions=False, favorites=False, rece
 
 def rate_limit_status(twitter):
     """Print current Twitter API rate limit status."""
-    r = twitter.application.rate_limit_status()
-    print("Remaining API requests: %i/%i (hourly limit)"
-          % (r['remaining_hits'], r['hourly_limit']))
+    rls = twitter.application.rate_limit_status()
+    print("Remaining API requests: %i/%i (interval limit)"
+          % (rls.rate_limit_remaining, rls.rate_limit_limit))
     print("Next reset in %is (%s)"
-          % (int(r['reset_time_in_seconds'] - time.time()),
-             time.asctime(time.localtime(r['reset_time_in_seconds']))))
+          % (int(rls.rate_limit_reset - _time.time()),
+             _time.asctime(_time.localtime(rls.rate_limit_reset))))
 
 def main(args=sys.argv[1:]):
     options = {
index fda7bbc821c5d2b1e50cd7f4bb2e9b4a79e0795b..8c763c16803e7aabcd23908d2eba03df4813dc58 100644 (file)
@@ -81,16 +81,16 @@ def lookup(twitter, user_ids):
             try:
                 portion = lookup_portion(twitter, user_ids[i:][:api_limit])
             except TwitterError as e:
-                if e.e.code == 400:
+                if e.e.code == 429:
                     err("Fail: %i API rate limit exceeded" % e.e.code)
-                    rate = twitter.application.rate_limit_status()
-                    reset = rate['reset_time_in_seconds']
+                    rls = twitter.application.rate_limit_status()
+                    reset = rls.rate_limit_reset
                     reset = time.asctime(time.localtime(reset))
-                    delay = int(rate['reset_time_in_seconds']
+                    delay = int(rls.rate_limit_reset
                                 - time.time()) + 5 # avoid race
-                    err("Hourly limit of %i requests reached, next reset on "
+                    err("Interval limit of %i requests reached, next reset on "
                         "%s: going to sleep for %i secs"
-                        % (rate['hourly_limit'], reset, delay))
+                        % (rls.rate_limit_limit, reset, delay))
                     fail.wait(delay)
                     continue
                 elif e.e.code == 502:
@@ -139,15 +139,15 @@ def follow(twitter, screen_name, followers=True):
                           % ("ers" if followers else "ing"))
                 err("Fail: %i Unauthorized (%s)" % (e.e.code, reason))
                 break
-            elif e.e.code == 400:
+            elif e.e.code == 429:
                 err("Fail: %i API rate limit exceeded" % e.e.code)
-                rate = twitter.application.rate_limit_status()
-                reset = rate['reset_time_in_seconds']
+                rls = twitter.application.rate_limit_status()
+                reset = rls.rate_limit_reset
                 reset = time.asctime(time.localtime(reset))
-                delay = int(rate['reset_time_in_seconds']
+                delay = int(rls.rate_limit_reset
                             - time.time()) + 5 # avoid race
-                err("Hourly limit of %i requests reached, next reset on %s: "
-                    "going to sleep for %i secs" % (rate['hourly_limit'],
+                err("Interval limit of %i requests reached, next reset on %s: "
+                    "going to sleep for %i secs" % (rls.rate_limit_limit,
                                                     reset, delay))
                 fail.wait(delay)
                 continue
@@ -180,12 +180,12 @@ def follow(twitter, screen_name, followers=True):
 
 def rate_limit_status(twitter):
     """Print current Twitter API rate limit status."""
-    r = twitter.application.rate_limit_status()
-    print("Remaining API requests: %i/%i (hourly limit)"
-          % (r['remaining_hits'], r['hourly_limit']))
+    rls = twitter.application.rate_limit_status()
+    print("Remaining API requests: %i/%i (interval limit)"
+          % (rls.rate_limit_remaining, rls.rate_limit_limit))
     print("Next reset in %is (%s)"
-          % (int(r['reset_time_in_seconds'] - time.time()),
-             time.asctime(time.localtime(r['reset_time_in_seconds']))))
+          % (int(rls.rate_limit_reset - time.time()),
+             time.asctime(time.localtime(rls.rate_limit_reset))))
 
 def main(args=sys.argv[1:]):
     options = {