Created
May 29, 2016 13:44
-
-
Save snitzr/73183026c2b9ac638927d2a9decdd59d to your computer and use it in GitHub Desktop.
twitter_bot.py
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 | |
# MIT license | |
from tweepy import OAuthHandler, Stream, API | |
from tweepy.streaming import StreamListener | |
import sqlite3 | |
import secrets | |
# auth | |
# add a file called secrets.py next to bot.py and enter keys and tokens into variables. | |
auth = OAuthHandler(secrets.consumer_key, secrets.consumer_secret) | |
auth.set_access_token(secrets.access_token, secrets.access_token_secret) | |
api = API(auth) | |
# auth end | |
class StdOutListener(StreamListener): | |
def on_status(self, status): | |
# establish db | |
conn = sqlite3.connect("db.sqlite3") # db created if no db.sqlite3 found. | |
c = conn.cursor() | |
# create db table for data. | |
c.execute("CREATE TABLE IF NOT EXISTS twitter(ID INTEGER PRIMARY KEY AUTOINCREMENT, created_at TEXT, screen_name TEXT, lang TEXT, text TEXT)") | |
# write data. | |
if status.text.find("RT @") == -1 or status.text.startswith("@"): # ignore manual RTs. | |
print("\n" + status.lang, status.created_at, status.user.screen_name, status.text) | |
c.execute("INSERT INTO twitter(created_at, screen_name, lang, text) VALUES (?, ?, ?, ?)", | |
(status.created_at, status.user.screen_name, status.lang, status.text)) | |
conn.commit() # save to db. | |
# rename "print" to "api.update_status" in production. | |
print("Tweets: @" + status.user.screen_name + " tweet text.") | |
def on_error(self, status_code): | |
# https://dev.twitter.com/overview/api/response-codes | |
print("Error: " + status_code) | |
return True | |
def on_timeout(self): | |
print("Timeout Tweepy on_timeout") | |
return True | |
if __name__ == "__main__": | |
stream = Stream(auth, StdOutListener()) | |
stream.filter(track=["search"], async=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment