Skip to content

Instantly share code, notes, and snippets.

@73696e65
Last active June 30, 2016 19:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 73696e65/60b00d053263a59bb37988db81f61ab6 to your computer and use it in GitHub Desktop.
Save 73696e65/60b00d053263a59bb37988db81f61ab6 to your computer and use it in GitHub Desktop.
Simple tweet logger to sqlite3 using streaming API
#!/usr/bin/env python3
import tweepy
from sqlite3 import connect
from os.path import isfile
from os import access, R_OK
from sys import exit
db_file = 'tweets.db'
# More here https://apps.twitter.com
consumer_key = 'XXXXXXXXXXXXXXXXXXXXXXXXX'
consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
access_token = 'XXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
def oauth_authenticate():
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
return tweepy.API(auth)
def db_file_exists(path):
return isfile(path) and access(path, R_OK)
def db_create(sqlite_file):
conn = connect(sqlite_file)
create_table = 'CREATE TABLE tweets ('
# Could be used for https://twitter.com/statuses/<status_id>
create_table += 'status_id INTEGER PRIMARY KEY, '
create_table += 'created_at DATETIME, '
create_table += 'screen_name VARCHAR(30), '
create_table += 'tweet VARCHAR(255)'
create_table += ')'
conn.cursor().execute(create_table)
conn.commit()
conn.close()
def db_connect(sqlite_file):
return connect(sqlite_file)
class MyStreamListener(tweepy.StreamListener):
def on_status(self, status):
status_id = status.id
created_at = status.created_at
screen_name = status.user.screen_name
tweet = status.text
print(str(created_at) + ' ' + '<@' + screen_name + '> ' + tweet)
conn = db_connect(db_file)
query = "INSERT INTO tweets(status_id, created_at, screen_name, tweet) VALUES (?, ?, ?, ?)"
conn.cursor().execute(query, (status_id, created_at, screen_name, tweet))
conn.commit()
conn.close()
if __name__ == "__main__":
# User authentication with OAuth
api = oauth_authenticate()
# Create the database file, if missing
if not db_file_exists(db_file):
db_create(db_file)
# Listen for the user stream
myStreamListener = MyStreamListener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
try:
myStream.userstream()
# myStream.filter(track=['text']) # For debugging only
except KeyboardInterrupt:
print('Program terminated.')
exit(0)
except AttributeError:
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment