import tweetstream import MySQLdb import sys import datetime words = ['keyword1', 'keyword2'] TWITTER_USER = "YourUserName" TWITTER_PASS = "YourPassword" DB_HOST = 'localhost' DB_USER = 'root' DB_PASS = '' DB_NAME = 'tweets' def twitter_to_iso_time(dt): datestring = dt[4:7] + " " + dt[8:10] + " " + dt[11:19] + " " + dt[26:30] date = datetime.datetime.strptime(datestring, '%b %d %H:%M:%S %Y') return date.strftime('%Y-%m-%d %H:%M:%S') def save_tweet(tweet): global cursor is_retweet = 0 is_reply = 0 if tweet['retweeted']: is_retweet = 1 if tweet['in_reply_to_user_id_str'] is not None: is_reply = 1 location = None if tweet['user']['location'] is not None and tweet['user']['location'] != "": location = tweet['user']['location'].encode('utf-8') sql = """ INSERT LOW_PRIORITY IGNORE INTO tweets (id, created_at, user_id, user_name, user_followers, user_friends, user_listed, user_statuses, user_location, user_utc_offset, is_retweet, is_reply, text) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """ cursor.execute(sql, [tweet['id'], twitter_to_iso_time(tweet['created_at']), tweet['user']['id'], tweet['user']['screen_name'].encode('utf-8'), tweet['user']['followers_count'], tweet['user']['friends_count'], tweet['user']['listed_count'], tweet['user']['statuses_count'], location, tweet['user']['utc_offset'], is_retweet, is_reply, tweet['text'].encode('utf-8')]) if __name__=='__main__': try: conn = MySQLdb.connect (host=DB_HOST, user=DB_USER, passwd=DB_PASS, db=DB_NAME) cursor = conn.cursor(MySQLdb.cursors.DictCursor) cursor.execute('SET CHARACTER SET utf8'); except MySQLdb.Error, e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit (1) try: with tweetstream.FilterStream(TWITTER_USER, TWITTER_PASS, track=words) as stream: for tweet in stream: print "From: %s (%d)\n%s" % ( tweet["user"]["screen_name"], stream.count, tweet['text']) print "" save_tweet(tweet) except tweetstream.ConnectionError, e: print "Disconnected from twitter. Reason:", e.reason