From 0b530bf49688b343a95061bb4cf3fab11d98e536 Mon Sep 17 00:00:00 2001 From: Joshua Roesslein Date: Fri, 20 Nov 2009 00:41:18 -0600 Subject: [PATCH] The streaming API Stream object can be run either in async/synch modes. See CHANGELOG for details. --- CHANGELOG | 8 ++++++++ tweepy/streaming.py | 27 +++++++++++++++------------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 1c74825..113c834 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -4,6 +4,14 @@ during upgrade will be listed here. 1.3 -> 1.4 [Future release] =========================== + Added people search API method. API.search_users() ++ Streaming API + - Moved parameters into POST body to prevent "head too big" errors. + - Stream can be run either asynchronously (threaded) or synchronously (blocks main thread). + By default Stream will run in sync. mode. To change this pass into the stream + method 'async=True'. Example: + s = Stream('test', 'password', MyListener()) + s.sample(async=True) # threaded mode + s.filter(track=['pizza']) # synch./blocking mode 1.2 -> 1.3 [Current release] ===================== diff --git a/tweepy/streaming.py b/tweepy/streaming.py index c0ece3e..ddb72ea 100644 --- a/tweepy/streaming.py +++ b/tweepy/streaming.py @@ -144,32 +144,36 @@ class Stream(object): if self.listener.on_limit(json.loads(data)['limit']['track']) == False: self.running = False - def firehose(self, count=None): + def _start(self, async): + self.running = True + if async: + Thread(target=self._run).start() + else: + self._run() + + def firehose(self, count=None, async=False): if self.running: raise TweepError('Stream object already connected!') self.url = '/%i/statuses/firehose.json?delimited=length' % STREAM_VERSION if count: self.url += '&count=%s' % count - self.running = True - Thread(target=self._run).start() + self._start(async) - def retweet(self): + def retweet(self, async=False): if self.running: raise TweepError('Stream object already connected!') self.url = '/%i/statuses/retweet.json?delimited=length' % STREAM_VERSION - self.running = True - Thread(target=self._run).start() + self._start(async) - def sample(self, count=None): + def sample(self, count=None, async=False): if self.running: raise TweepError('Stream object already connected!') self.url = '/%i/statuses/sample.json?delimited=length' % STREAM_VERSION if count: self.url += '&count=%s' % count - self.running = True - Thread(target=self._run).start() + self._start(async) - def filter(self, follow=None, track=None): + def filter(self, follow=None, track=None, async=False): params = {} self.headers['Content-type'] = "application/x-www-form-urlencoded" if self.running: @@ -180,8 +184,7 @@ class Stream(object): if track: params['track'] = ','.join(map(str, track)) self.body = urllib.urlencode(params) - self.running = True - Thread(target=self._run).start() + self._start(async) def disconnect(self): if self.running is False: -- 2.25.1