def listen(self): # slopppy way to keep it running and reconnecting if it hits a bump. # @NOTE you MUST kill the process to get this to stop because of this hack. I know.... I suck, deal with it.. while True: # Keeps it going and reconnecting if it crashes. See 'sloppy' above. try: with tweetstream.FilterStream(self.username, self.password, track=self.track) as stream: for tweet in stream: try: tuser = self.handle_user(tweet) obj = Tweet(twitter_user=tuser) obj.text = tweet["text"].encode('utf-8') obj.tweet_id = tweet["id_str"] obj.created_at = self.make_datetime(tweet["created_at"]) obj.save() if TWAP_ARCHIVE: self.archive_json(obj, tweet) for tag in self.hashtags(tweet): obj.tags.add(tag) if tweet["geo"]: self.handle_geo(obj, tweet["geo"]) if tweet["coordinates"]: self.handle_coordinates(obj, tweet["coordinates"]) print "%s - %s" % (stream.count, self.hashtags(tweet)) except: print "Error Reading Record, skipping." except tweetstream.ConnectionError, e: print "Twitter Connection Error:", e.reason break except:
def _handle_tweet(self, tweet_data): """ Bases raw tweet data into various django models. :param tweet_data: :return: """ try: tweet = Tweet.objects.get(tweet_id=tweet_data['id']) return None # Already exists, skip it. except Tweet.DoesNotExist: tweet = Tweet( twitter_user = self._handle_user(tweet_data), tweet_id = tweet_data['id'], created_at = self._parse_datetime(tweet_data['created_at']), text = tweet_data['text'] ) tweet.save() hashtags = self._parse_hashtags(tweet_data['text']) if hashtags: tweet.tags.add(*hashtags) return tweet