Last active
June 30, 2016 19:20
-
-
Save 73696e65/60b00d053263a59bb37988db81f61ab6 to your computer and use it in GitHub Desktop.
Simple tweet logger to sqlite3 using streaming API
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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