diff --git a/oauth_django_example/__init__.py b/oauth_django_example/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/oauth_django_example/manage.py b/oauth_django_example/manage.py deleted file mode 100644 index 5e78ea9..0000000 --- a/oauth_django_example/manage.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python -from django.core.management import execute_manager -try: - import settings # Assumed to be in the same directory. -except ImportError: - import sys - sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) - sys.exit(1) - -if __name__ == "__main__": - execute_manager(settings) diff --git a/oauth_django_example/settings.py b/oauth_django_example/settings.py deleted file mode 100644 index 8ceb7a5..0000000 --- a/oauth_django_example/settings.py +++ /dev/null @@ -1,94 +0,0 @@ -import os.path - -DEBUG = True -TEMPLATE_DEBUG = DEBUG - -ADMINS = ( - ('Ryan McGrath', 'ryan@venodesigns.net'), -) - -MANAGERS = ADMINS - -DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. - 'NAME': os.path.join(os.path.dirname(__file__), 'test.db'), # Or path to database file if using sqlite3. - 'USER': '', # Not used with sqlite3. - 'PASSWORD': '', # Not used with sqlite3. - 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. - 'PORT': '', # Set to empty string for default. Not used with sqlite3. - } -} - - -AUTH_PROFILE_MODULE = 'twitter.Profile' - -# Local time zone for this installation. Choices can be found here: -# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name -# although not all choices may be available on all operating systems. -# On Unix systems, a value of None will cause Django to use the same -# timezone as the operating system. -# If running in a Windows environment this must be set to the same as your -# system time zone. -TIME_ZONE = 'America/New_York' - -# Language code for this installation. All choices can be found here: -# http://www.i18nguy.com/unicode/language-identifiers.html -LANGUAGE_CODE = 'en-us' - -SITE_ID = 1 - -# If you set this to False, Django will make some optimizations so as not -# to load the internationalization machinery. -USE_I18N = True - -# If you set this to False, Django will not format dates, numbers and -# calendars according to the current locale -USE_L10N = True - -# Absolute path to the directory that holds media. -# Example: "/home/media/media.lawrence.com/" -MEDIA_ROOT = '' - -# URL that handles the media served from MEDIA_ROOT. Make sure to use a -# trailing slash if there is a path component (optional in other cases). -# Examples: "http://media.lawrence.com", "http://example.com/media/" -MEDIA_URL = '' - -# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a -# trailing slash. -# Examples: "http://foo.com/media/", "/media/". -ADMIN_MEDIA_PREFIX = '/media/' - -# Make this unique, and don't share it with anybody. -SECRET_KEY = '&!_t1t^gmenaid9mkmkuw=4nthj7f)o+!@$#ipfp*s11380t*)' - -# List of callables that know how to import templates from various sources. -TEMPLATE_LOADERS = ( - 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', -# 'django.template.loaders.eggs.Loader', -) - -MIDDLEWARE_CLASSES = ( - 'django.middleware.common.CommonMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', -) - -ROOT_URLCONF = 'twython_testing.urls' - -TEMPLATE_DIRS = ( - os.path.join(os.path.dirname(__file__), 'templates'), -) - -INSTALLED_APPS = ( - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'django.contrib.messages', - 'twitter', -) diff --git a/oauth_django_example/templates/tweets.html b/oauth_django_example/templates/tweets.html deleted file mode 100644 index a2ec453..0000000 --- a/oauth_django_example/templates/tweets.html +++ /dev/null @@ -1,3 +0,0 @@ -{% for tweet in tweets %} - {{ tweet.text }} -{% endfor %} diff --git a/oauth_django_example/test.db b/oauth_django_example/test.db deleted file mode 100644 index 3082a95..0000000 Binary files a/oauth_django_example/test.db and /dev/null differ diff --git a/oauth_django_example/twitter/__init__.py b/oauth_django_example/twitter/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/oauth_django_example/twitter/models.py b/oauth_django_example/twitter/models.py deleted file mode 100644 index 3a07664..0000000 --- a/oauth_django_example/twitter/models.py +++ /dev/null @@ -1,7 +0,0 @@ -from django.db import models -from django.contrib.auth.models import User - -class Profile(models.Model): - user = models.ForeignKey(User) - oauth_token = models.CharField(max_length = 200) - oauth_secret = models.CharField(max_length = 200) diff --git a/oauth_django_example/twitter/views.py b/oauth_django_example/twitter/views.py deleted file mode 100644 index cb3f182..0000000 --- a/oauth_django_example/twitter/views.py +++ /dev/null @@ -1,73 +0,0 @@ -from django.contrib.auth import authenticate, login, logout -from django.contrib.auth.models import User -from django.http import HttpResponse, HttpResponseRedirect -from django.shortcuts import render_to_response -from django.contrib.auth.decorators import login_required - -from twython import Twython -from twitter.models import Profile - -CONSUMER_KEY = "YOUR CONSUMER KEY HERE" -CONSUMER_SECRET = "YOUR CONSUMER SECRET HERE" - -def twitter_logout(request): - logout(request) - return HttpResponseRedirect('/') - -def twitter_begin_auth(request): - # Instantiate Twython with the first leg of our trip. - twitter = Twython( - twitter_token = CONSUMER_KEY, - twitter_secret = CONSUMER_SECRET - ) - - # Request an authorization url to send the user to... - auth_props = twitter.get_authentication_tokens() - - # Then send them over there, durh. - request.session['request_token'] = auth_props - return HttpResponseRedirect(auth_props['auth_url']) - -def twitter_thanks(request): - # Now that we've got the magic tokens back from Twitter, we need to exchange - # for permanent ones and store them... - twitter = Twython( - twitter_token = CONSUMER_KEY, - twitter_secret = CONSUMER_SECRET, - oauth_token = request.session['request_token']['oauth_token'], - oauth_token_secret = request.session['request_token']['oauth_token_secret'] - ) - - # Retrieve the tokens we want... - authorized_tokens = twitter.get_authorized_tokens() - - # If they already exist, grab them, login and redirect to a page displaying stuff. - try: - user = User.objects.get(username = authorized_tokens['screen_name']) - except User.DoesNotExist: - # We mock a creation here; no email, password is just the token, etc. - user = User.objects.create_user(authorized_tokens['screen_name'], "fjdsfn@jfndjfn.com", authorized_tokens['oauth_token_secret']) - profile = Profile() - profile.user = user - profile.oauth_token = authorized_tokens['oauth_token'] - profile.oauth_secret = authorized_tokens['oauth_token_secret'] - profile.save() - - user = authenticate( - username = authorized_tokens['screen_name'], - password = authorized_tokens['oauth_token_secret'] - ) - login(request, user) - return HttpResponseRedirect('/timeline') - -def twitter_timeline(request): - user = request.user.get_profile() - twitter = Twython( - twitter_token = CONSUMER_KEY, - twitter_secret = CONSUMER_SECRET, - oauth_token = user.oauth_token, - oauth_token_secret = user.oauth_secret - ) - my_tweets = twitter.getHomeTimeline() - print my_tweets - return render_to_response('tweets.html', {'tweets': my_tweets}) diff --git a/oauth_django_example/urls.py b/oauth_django_example/urls.py deleted file mode 100644 index 9344f4d..0000000 --- a/oauth_django_example/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.conf.urls.defaults import * -from twitter.views import twitter_begin_auth, twitter_thanks, twitter_logout, twitter_timeline - -urlpatterns = patterns('', - (r'^login/?$', twitter_begin_auth), - (r'^/logout?$', twitter_logout), - (r'^thanks/?$', twitter_thanks), # Where they're redirect to after authorizing - (r'^timeline/?$', twitter_timeline), -) diff --git a/twython/streaming.py b/twython/streaming.py index f6df1a3..8020116 100644 --- a/twython/streaming.py +++ b/twython/streaming.py @@ -1,37 +1,50 @@ #!/usr/bin/python """ - Yes, this is just in __init__ for now, hush. + TwythonStreamer is an implementation of the Streaming API for Twython. + Pretty self explanatory by reading the code below. It's worth noting + that the end user should, ideally, never import this library, but rather + this is exposed via a linking method in Twython's core. - The beginnings of Twitter Streaming API support in Twython. Don't expect this to work at all, - consider it a stub for now. -- Ryan - Questions, comments? ryan@venodesigns.net """ -import httplib, urllib, urllib2, mimetypes, mimetools, socket, time +__author__ = "Ryan McGrath " +__version__ = "1.0.0" + +import urllib +import urllib2 +import urlparse +import httplib +import httplib2 +import re from urllib2 import HTTPError +# There are some special setups (like, oh, a Django application) where +# simplejson exists behind the scenes anyway. Past Python 2.6, this should +# never really cause any problems to begin with. try: - import simplejson + # Python 2.6 and up + import json as simplejson except ImportError: try: - import json as simplejson + # Python 2.6 and below (2.4/2.5, 2.3 is not guranteed to work with this library to begin with) + import simplejson except ImportError: try: + # This case gets rarer by the day, but if we need to, we can pull it from Django provided it's there. from django.utils import simplejson except: - raise Exception("Twython (Streaming) requires the simplejson library (or Python 2.6) to work. http://www.undefined.org/python/") - -__author__ = "Ryan McGrath " -__version__ = "0.1" + # Seriously wtf is wrong with you if you get this Exception. + raise Exception("Twython requires the simplejson library (or Python 2.6) to work. http://www.undefined.org/python/") class TwythonStreamingError(Exception): def __init__(self, msg): self.msg = msg + def __str__(self): - return repr(self.msg) + return "%s" % str(self.msg) feeds = { "firehose": "http://stream.twitter.com/firehose.json", @@ -43,10 +56,5 @@ feeds = { "track": "http://stream.twitter.com/track.json", } -class stream: +class Stream(object): def __init__(self, username = None, password = None, feed = "spritzer", user_agent = "Twython Streaming"): - self.username = username - self.password = password - self.feed = feeds[feed] - self.user_agent = user_agent - self.connection_open = False