Any reason why this code would constantly return a 401 error? I cloned it from here "https://github.com/purplewove/social-media-apis" to test the twython functionality but though I have my twitter keys and secrets, I just get a lot of 401's rather than actual tweets.
I'm used to Python 3.5 but this appears to run without any client side errors in 3.X or 2.X. I'm using the Anaconda package as have "pip install twython"ed successfully.
Code is as below (unchanged from source):
'''
social-media-apis
=================
currently just a bit of code for keyword searches using twython
to use, make sure twython is installed and then type:
python filter_terms.py [consumer_key] [consumer_secret] [access_token_key] [access_token_secret] [search_term]
and the script will dump the text from all tweets gleaned from the streaming api containing the search term to standard output.
find consumer_key, consumer_secret, access_token_key, access_token_secret here: dev.twitter.com/apps
'''
#filter_terms.py
from Stream import Stream
import sys
app_key = sys.argv[1]
app_secret = sys.argv[2]
oauth_token = sys.argv[3]
oauth_token_secret = sys.argv[4]
terms = sys.argv[5:]
stream = Stream(app_key, app_secret, oauth_token, oauth_token_secret)
stream.filter_terms(terms)
#Stream.py
from MyStreamer import MyStreamer
class Stream():
def __init__(self, app_key, app_secret, oauth_token, oauth_token_secret):
self.streamer = MyStreamer(app_key, app_secret, oauth_token, oauth_token_secret)
def filter_terms(self, terms):
self.streamer.filter_terms(terms)
#MyStreamer.py
from twython import TwythonStreamer
import sqlite3
import sys
import datetime
class MyStreamer(TwythonStreamer):
'''a simple streamer that prints the text of a tweet to standard output'''
def __init__(self, app_key, app_secret, oauth_token, oauth_token_secret):
TwythonStreamer.__init__(self, app_key, app_secret, oauth_token, oauth_token_secret)
def on_success(self, data):
if 'text' in data:
print (data['text'])
def on_error(self, status_code, data):
print(status_code)
def filter_terms(self, terms):
'.'.join(terms)
self.statuses.filter(track = terms)