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
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
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
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)
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()