Add compression support.
authorMike <mikeandmore@gmail.com>
Sun, 23 Jan 2011 07:08:49 +0000 (15:08 +0800)
committerJoshua Roesslein <jroesslein@gmail.com>
Wed, 15 May 2013 04:58:05 +0000 (21:58 -0700)
Conflicts:
tweepy/api.py

CONTRIBUTORS
tweepy/api.py
tweepy/binder.py

index 7d95a42827fa91046e94a23df9c228fc1d972374..12956dffe511f357b6e59a73112997bd48d7cfcf 100644 (file)
@@ -28,3 +28,4 @@ Can Duruk
 Jan Schaumann (@jschauma)
 Stuart Powers
 Jeff Hull (@jsh2134)
+Mike (mikeandmore)
index f6943341b825806d53447fec5b42bdd2aa204748..3e9fe2a7a4b6bdfecb8b7ac28db554ba5cf64e9b 100644 (file)
@@ -18,7 +18,7 @@ class API(object):
             host='api.twitter.com', search_host='search.twitter.com',
              cache=None, secure=True, api_root='/1.1', search_root='',
             retry_count=0, retry_delay=0, retry_errors=None, timeout=60,
-            parser=None):
+            parser=None, compression=False):
         self.auth = auth_handler
         self.host = host
         self.search_host = search_host
@@ -26,6 +26,7 @@ class API(object):
         self.search_root = search_root
         self.cache = cache
         self.secure = secure
+        self.compression = compression
         self.retry_count = retry_count
         self.retry_delay = retry_delay
         self.retry_errors = retry_errors
index b4b91e67de1035cf85d694b33ff30bc479d11d8d..c5e99b9358187f7be53833bb1a1e1da907ae027c 100644 (file)
@@ -6,6 +6,8 @@ import httplib
 import urllib
 import time
 import re
+from StringIO import StringIO
+import gzip
 
 from tweepy.error import TweepError
 from tweepy.utils import convert_to_utf8_str
@@ -140,6 +142,10 @@ def bind_api(**config):
                             self.method, self.headers, self.parameters
                     )
 
+                # Request compression if configured
+                if self.api.compression:
+                    self.headers['Accept-encoding'] = 'gzip'
+
                 # Execute request
                 try:
                     conn.request(self.method, url, headers=self.headers, body=self.post_data)
@@ -167,7 +173,14 @@ def bind_api(**config):
                 raise TweepError(error_msg, resp)
 
             # Parse the response payload
-            result = self.api.parser.parse(self, resp.read())
+            body = resp.read()
+            if resp.getheader('Content-Encoding', '') == 'gzip':
+                try:
+                    zipper = gzip.GzipFile(fileobj=StringIO(body))
+                    body = zipper.read()
+                except Exception, e:
+                    raise TweepError('Failed to decompress data: %s' % e)
+            result = self.api.parser.parse(self, body)
 
             conn.close()