From 6fe1a95a2ef1361bf93ae0177c50b582afa8109f Mon Sep 17 00:00:00 2001 From: Ryan McGrath Date: Tue, 28 Jul 2009 23:31:15 -0400 Subject: [PATCH] Packaged versions galore... Need to figure out the best way to handle Tango3k soon - perhaps in a new branch? Is anyone even using it at the moment? --- build/lib/tango/tango.py | 629 ++++++++++++++++++++++++++++ dist/tango-0.6.tar.gz | Bin 0 -> 6707 bytes dist/tango-0.6.win32.exe | Bin 0 -> 67962 bytes dist/tango-0.7.tar.gz | Bin 0 -> 6709 bytes dist/tango-0.7.win32.exe | Bin 0 -> 67963 bytes setup.py | 4 +- tango.egg-info/PKG-INFO | 17 + tango.egg-info/SOURCES.txt | 8 + tango.egg-info/dependency_links.txt | 1 + tango.egg-info/requires.txt | 2 + tango.egg-info/top_level.txt | 1 + 11 files changed, 660 insertions(+), 2 deletions(-) create mode 100644 build/lib/tango/tango.py create mode 100644 dist/tango-0.6.tar.gz create mode 100644 dist/tango-0.6.win32.exe create mode 100644 dist/tango-0.7.tar.gz create mode 100644 dist/tango-0.7.win32.exe create mode 100644 tango.egg-info/PKG-INFO create mode 100644 tango.egg-info/SOURCES.txt create mode 100644 tango.egg-info/dependency_links.txt create mode 100644 tango.egg-info/requires.txt create mode 100644 tango.egg-info/top_level.txt diff --git a/build/lib/tango/tango.py b/build/lib/tango/tango.py new file mode 100644 index 0000000..0b7d734 --- /dev/null +++ b/build/lib/tango/tango.py @@ -0,0 +1,629 @@ +#!/usr/bin/python + +""" + Tango is an up-to-date library for Python that wraps the Twitter API. + Other Python Twitter libraries seem to have fallen a bit behind, and + Twitter's API has evolved a bit. Here's hoping this helps. + + TODO: OAuth, Streaming API? + + Questions, comments? ryan@venodesigns.net +""" + +import httplib, urllib, urllib2, mimetypes, mimetools + +from urllib2 import HTTPError + +__author__ = "Ryan McGrath " +__version__ = "0.6" + +try: + import simplejson +except ImportError: + try: + import json as simplejson + except: + raise Exception("Tango requires the simplejson library (or Python 2.6) to work. http://www.undefined.org/python/") + +try: + import oauth +except ImportError: + pass + +class TangoError(Exception): + def __init__(self, msg, error_code=None): + self.msg = msg + if error_code == 400: + raise APILimit(msg) + def __str__(self): + return repr(self.msg) + +class APILimit(TangoError): + def __init__(self, msg): + self.msg = msg + def __str__(self): + return repr(self.msg) + +class setup: + def __init__(self, authtype = "OAuth", username = None, password = None, oauth_keys = None, headers = None): + self.authtype = authtype + self.authenticated = False + self.username = username + self.password = password + self.oauth_keys = oauth_keys + if self.username is not None and self.password is not None: + if self.authtype == "OAuth": + self.request_token_url = 'https://twitter.com/oauth/request_token' + self.access_token_url = 'https://twitter.com/oauth/access_token' + self.authorization_url = 'http://twitter.com/oauth/authorize' + self.signin_url = 'http://twitter.com/oauth/authenticate' + # Do OAuth type stuff here - how should this be handled? Seems like a framework question... + elif self.authtype == "Basic": + self.auth_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() + self.auth_manager.add_password(None, "http://twitter.com", self.username, self.password) + self.handler = urllib2.HTTPBasicAuthHandler(self.auth_manager) + self.opener = urllib2.build_opener(self.handler) + if self.headers is not None: + self.opener.addheaders = [('User-agent', self.headers)] + try: + test_verify = simplejson.load(self.opener.open("http://twitter.com/account/verify_credentials.json")) + self.authenticated = True + except HTTPError, e: + raise TangoError("Authentication failed with your provided credentials. Try again? (%s failure)" % `e.code`, e.code) + + # OAuth functions; shortcuts for verifying the credentials. + def fetch_response_oauth(self, oauth_request): + pass + + def get_unauthorized_request_token(self): + pass + + def get_authorization_url(self, token): + pass + + def exchange_tokens(self, request_token): + pass + + # URL Shortening function huzzah + def shortenURL(self, url_to_shorten, shortener = "http://is.gd/api.php", query = "longurl"): + try: + return urllib2.urlopen(shortener + "?" + urllib.urlencode({query: url_to_shorten})).read() + except HTTPError, e: + raise TangoError("shortenURL() failed with a %s error code." % `e.code`) + + def constructApiURL(self, base_url, params): + return base_url + "?" + "&".join(["%s=%s" %(key, value) for (key, value) in params.iteritems()]) + + def getRateLimitStatus(self, rate_for = "requestingIP"): + try: + if rate_for == "requestingIP": + return simplejson.load(urllib2.urlopen("http://twitter.com/account/rate_limit_status.json")) + else: + if self.authenticated is True: + return simplejson.load(self.opener.open("http://twitter.com/account/rate_limit_status.json")) + else: + raise TangoError("You need to be authenticated to check a rate limit status on an account.") + except HTTPError, e: + raise TangoError("It seems that there's something wrong. Twitter gave you a %s error code; are you doing something you shouldn't be?" % `e.code`, e.code) + + def getPublicTimeline(self): + try: + return simplejson.load(urllib2.urlopen("http://twitter.com/statuses/public_timeline.json")) + except HTTPError, e: + raise TangoError("getPublicTimeline() failed with a %s error code." % `e.code`) + + def getFriendsTimeline(self, **kwargs): + if self.authenticated is True: + try: + friendsTimelineURL = self.constructApiURL("http://twitter.com/statuses/friends_timeline.json", kwargs) + return simplejson.load(self.opener.open(friendsTimelineURL)) + except HTTPError, e: + raise TangoError("getFriendsTimeline() failed with a %s error code." % `e.code`) + else: + raise TangoError("getFriendsTimeline() requires you to be authenticated.") + + def getUserTimeline(self, id = None, **kwargs): + if id is not None and kwargs.has_key("user_id") is False and kwargs.has_key("screen_name") is False: + userTimelineURL = self.constructApiURL("http://twitter.com/statuses/user_timeline/" + id + ".json", kwargs) + elif id is None and kwargs.has_key("user_id") is False and kwargs.has_key("screen_name") is False and self.authenticated is True: + userTimelineURL = self.constructApiURL("http://twitter.com/statuses/user_timeline/" + self.username + ".json", kwargs) + else: + userTimelineURL = self.constructApiURL("http://twitter.com/statuses/user_timeline.json", kwargs) + try: + # We do our custom opener if we're authenticated, as it helps avoid cases where it's a protected user + if self.authenticated is True: + return simplejson.load(self.opener.open(userTimelineURL)) + else: + return simplejson.load(urllib2.urlopen(userTimelineURL)) + except HTTPError, e: + raise TangoError("Failed with a %s error code. Does this user hide/protect their updates? If so, you'll need to authenticate and be their friend to get their timeline." + % `e.code`, e.code) + + def getUserMentions(self, **kwargs): + if self.authenticated is True: + try: + mentionsFeedURL = self.constructApiURL("http://twitter.com/statuses/mentions.json", kwargs) + return simplejson.load(self.opener.open(mentionsFeedURL)) + except HTTPError, e: + raise TangoError("getUserMentions() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("getUserMentions() requires you to be authenticated.") + + def showStatus(self, id): + try: + return simplejson.load(self.opener.open("http://twitter.com/statuses/show/%s.json" % id)) + except HTTPError, e: + raise TangoError("Failed with a %s error code. Does this user hide/protect their updates? You'll need to authenticate and be friends to get their timeline." + % `e.code`, e.code) + + def updateStatus(self, status, in_reply_to_status_id = None): + if self.authenticated is True: + if len(list(status)) > 140: + raise TangoError("This status message is over 140 characters. Trim it down!") + try: + return simplejson.load(self.opener.open("http://twitter.com/statuses/update.json?", urllib.urlencode({"status": status, "in_reply_to_status_id": in_reply_to_status_id}))) + except HTTPError, e: + raise TangoError("updateStatus() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("updateStatus() requires you to be authenticated.") + + def destroyStatus(self, id): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/status/destroy/%s.json", "POST" % id)) + except HTTPError, e: + raise TangoError("destroyStatus() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("destroyStatus() requires you to be authenticated.") + + def endSession(self): + if self.authenticated is True: + try: + self.opener.open("http://twitter.com/account/end_session.json", "") + self.authenticated = False + except HTTPError, e: + raise TangoError("endSession failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("You can't end a session when you're not authenticated to begin with.") + + def getDirectMessages(self, since_id = None, max_id = None, count = None, page = "1"): + if self.authenticated is True: + apiURL = "http://twitter.com/direct_messages.json?page=" + page + if since_id is not None: + apiURL += "&since_id=" + since_id + if max_id is not None: + apiURL += "&max_id=" + max_id + if count is not None: + apiURL += "&count=" + count + + try: + return simplejson.load(self.opener.open(apiURL)) + except HTTPError, e: + raise TangoError("getDirectMessages() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("getDirectMessages() requires you to be authenticated.") + + def getSentMessages(self, since_id = None, max_id = None, count = None, page = "1"): + if self.authenticated is True: + apiURL = "http://twitter.com/direct_messages/sent.json?page=" + page + if since_id is not None: + apiURL += "&since_id=" + since_id + if max_id is not None: + apiURL += "&max_id=" + max_id + if count is not None: + apiURL += "&count=" + count + + try: + return simplejson.load(self.opener.open(apiURL)) + except HTTPError, e: + raise TangoError("getSentMessages() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("getSentMessages() requires you to be authenticated.") + + def sendDirectMessage(self, user, text): + if self.authenticated is True: + if len(list(text)) < 140: + try: + return self.opener.open("http://twitter.com/direct_messages/new.json", urllib.urlencode({"user": user, "text": text})) + except HTTPError, e: + raise TangoError("sendDirectMessage() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("Your message must not be longer than 140 characters") + else: + raise TangoError("You must be authenticated to send a new direct message.") + + def destroyDirectMessage(self, id): + if self.authenticated is True: + try: + return self.opener.open("http://twitter.com/direct_messages/destroy/%s.json" % id, "") + except HTTPError, e: + raise TangoError("destroyDirectMessage() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("You must be authenticated to destroy a direct message.") + + def createFriendship(self, id = None, user_id = None, screen_name = None, follow = "false"): + if self.authenticated is True: + apiURL = "" + if id is not None: + apiURL = "http://twitter.com/friendships/create/" + id + ".json" + "?follow=" + follow + if user_id is not None: + apiURL = "http://twitter.com/friendships/create.json?user_id=" + user_id + "&follow=" + follow + if screen_name is not None: + apiURL = "http://twitter.com/friendships/create.json?screen_name=" + screen_name + "&follow=" + follow + try: + return simplejson.load(self.opener.open(apiURL)) + except HTTPError, e: + # Rate limiting is done differently here for API reasons... + if e.code == 403: + raise TangoError("You've hit the update limit for this method. Try again in 24 hours.") + raise TangoError("createFriendship() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("createFriendship() requires you to be authenticated.") + + def destroyFriendship(self, id = None, user_id = None, screen_name = None): + if self.authenticated is True: + apiURL = "" + if id is not None: + apiURL = "http://twitter.com/friendships/destroy/" + id + ".json" + if user_id is not None: + apiURL = "http://twitter.com/friendships/destroy.json?user_id=" + user_id + if screen_name is not None: + apiURL = "http://twitter.com/friendships/destroy.json?screen_name=" + screen_name + try: + return simplejson.load(self.opener.open(apiURL)) + except HTTPError, e: + raise TangoError("destroyFriendship() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("destroyFriendship() requires you to be authenticated.") + + def checkIfFriendshipExists(self, user_a, user_b): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/friendships/exists.json", urllib.urlencode({"user_a": user_a, "user_b": user_b}))) + except HTTPError, e: + raise TangoError("checkIfFriendshipExists() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("checkIfFriendshipExists(), oddly, requires that you be authenticated.") + + def updateDeliveryDevice(self, device_name = "none"): + if self.authenticated is True: + try: + return self.opener.open("http://twitter.com/account/update_delivery_device.json?", urllib.urlencode({"device": device_name})) + except HTTPError, e: + raise TangoError("updateDeliveryDevice() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("updateDeliveryDevice() requires you to be authenticated.") + + def updateProfileColors(self, **kwargs): + if self.authenticated is True: + try: + return self.opener.open(self.constructApiURL("http://twitter.com/account/update_profile_colors.json?", kwargs)) + except HTTPError, e: + raise TangoError("updateProfileColors() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("updateProfileColors() requires you to be authenticated.") + + def updateProfile(self, name = None, email = None, url = None, location = None, description = None): + if self.authenticated is True: + useAmpersands = False + updateProfileQueryString = "" + if name is not None: + if len(list(name)) < 20: + updateProfileQueryString += "name=" + name + useAmpersands = True + else: + raise TangoError("Twitter has a character limit of 20 for all usernames. Try again.") + if email is not None and "@" in email: + if len(list(email)) < 40: + if useAmpersands is True: + updateProfileQueryString += "&email=" + email + else: + updateProfileQueryString += "email=" + email + useAmpersands = True + else: + raise TangoError("Twitter has a character limit of 40 for all email addresses, and the email address must be valid. Try again.") + if url is not None: + if len(list(url)) < 100: + if useAmpersands is True: + updateProfileQueryString += "&" + urllib.urlencode({"url": url}) + else: + updateProfileQueryString += urllib.urlencode({"url": url}) + useAmpersands = True + else: + raise TangoError("Twitter has a character limit of 100 for all urls. Try again.") + if location is not None: + if len(list(location)) < 30: + if useAmpersands is True: + updateProfileQueryString += "&" + urllib.urlencode({"location": location}) + else: + updateProfileQueryString += urllib.urlencode({"location": location}) + useAmpersands = True + else: + raise TangoError("Twitter has a character limit of 30 for all locations. Try again.") + if description is not None: + if len(list(description)) < 160: + if useAmpersands is True: + updateProfileQueryString += "&" + urllib.urlencode({"description": description}) + else: + updateProfileQueryString += urllib.urlencode({"description": description}) + else: + raise TangoError("Twitter has a character limit of 160 for all descriptions. Try again.") + + if updateProfileQueryString != "": + try: + return self.opener.open("http://twitter.com/account/update_profile.json?", updateProfileQueryString) + except HTTPError, e: + raise TangoError("updateProfile() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("updateProfile() requires you to be authenticated.") + + def getFavorites(self, page = "1"): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/favorites.json?page=" + page)) + except HTTPError, e: + raise TangoError("getFavorites() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("getFavorites() requires you to be authenticated.") + + def createFavorite(self, id): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/favorites/create/" + id + ".json", "")) + except HTTPError, e: + raise TangoError("createFavorite() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("createFavorite() requires you to be authenticated.") + + def destroyFavorite(self, id): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/favorites/destroy/" + id + ".json", "")) + except HTTPError, e: + raise TangoError("destroyFavorite() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("destroyFavorite() requires you to be authenticated.") + + def notificationFollow(self, id = None, user_id = None, screen_name = None): + if self.authenticated is True: + apiURL = "" + if id is not None: + apiURL = "http://twitter.com/notifications/follow/" + id + ".json" + if user_id is not None: + apiURL = "http://twitter.com/notifications/follow/follow.json?user_id=" + user_id + if screen_name is not None: + apiURL = "http://twitter.com/notifications/follow/follow.json?screen_name=" + screen_name + try: + return simplejson.load(self.opener.open(apiURL, "")) + except HTTPError, e: + raise TangoError("notificationFollow() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("notificationFollow() requires you to be authenticated.") + + def notificationLeave(self, id = None, user_id = None, screen_name = None): + if self.authenticated is True: + apiURL = "" + if id is not None: + apiURL = "http://twitter.com/notifications/leave/" + id + ".json" + if user_id is not None: + apiURL = "http://twitter.com/notifications/leave/leave.json?user_id=" + user_id + if screen_name is not None: + apiURL = "http://twitter.com/notifications/leave/leave.json?screen_name=" + screen_name + try: + return simplejson.load(self.opener.open(apiURL, "")) + except HTTPError, e: + raise TangoError("notificationLeave() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("notificationLeave() requires you to be authenticated.") + + def getFriendsIDs(self, id = None, user_id = None, screen_name = None, page = "1"): + apiURL = "" + if id is not None: + apiURL = "http://twitter.com/friends/ids/" + id + ".json" + "?page=" + page + if user_id is not None: + apiURL = "http://twitter.com/friends/ids.json?user_id=" + user_id + "&page=" + page + if screen_name is not None: + apiURL = "http://twitter.com/friends/ids.json?screen_name=" + screen_name + "&page=" + page + try: + return simplejson.load(urllib2.urlopen(apiURL)) + except HTTPError, e: + raise TangoError("getFriendsIDs() failed with a %s error code." % `e.code`, e.code) + + def getFollowersIDs(self, id = None, user_id = None, screen_name = None, page = "1"): + apiURL = "" + if id is not None: + apiURL = "http://twitter.com/followers/ids/" + id + ".json" + "?page=" + page + if user_id is not None: + apiURL = "http://twitter.com/followers/ids.json?user_id=" + user_id + "&page=" + page + if screen_name is not None: + apiURL = "http://twitter.com/followers/ids.json?screen_name=" + screen_name + "&page=" + page + try: + return simplejson.load(urllib2.urlopen(apiURL)) + except HTTPError, e: + raise TangoError("getFollowersIDs() failed with a %s error code." % `e.code`, e.code) + + def createBlock(self, id): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/blocks/create/" + id + ".json", "")) + except HTTPError, e: + raise TangoError("createBlock() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("createBlock() requires you to be authenticated.") + + def destroyBlock(self, id): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/blocks/destroy/" + id + ".json", "")) + except HTTPError, e: + raise TangoError("destroyBlock() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("destroyBlock() requires you to be authenticated.") + + def checkIfBlockExists(self, id = None, user_id = None, screen_name = None): + apiURL = "" + if id is not None: + apiURL = "http://twitter.com/blocks/exists/" + id + ".json" + if user_id is not None: + apiURL = "http://twitter.com/blocks/exists.json?user_id=" + user_id + if screen_name is not None: + apiURL = "http://twitter.com/blocks/exists.json?screen_name=" + screen_name + try: + return simplejson.load(urllib2.urlopen(apiURL)) + except HTTPError, e: + raise TangoError("checkIfBlockExists() failed with a %s error code." % `e.code`, e.code) + + def getBlocking(self, page = "1"): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/blocks/blocking.json?page=" + page)) + except HTTPError, e: + raise TangoError("getBlocking() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("getBlocking() requires you to be authenticated") + + def getBlockedIDs(self): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/blocks/blocking/ids.json")) + except HTTPError, e: + raise TangoError("getBlockedIDs() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("getBlockedIDs() requires you to be authenticated.") + + def searchTwitter(self, search_query, **kwargs): + searchURL = self.constructApiURL("http://search.twitter.com/search.json", kwargs) + "&" + urllib.urlencode({"q": search_query}) + try: + return simplejson.load(urllib2.urlopen(searchURL)) + except HTTPError, e: + raise TangoError("getSearchTimeline() failed with a %s error code." % `e.code`, e.code) + + def getCurrentTrends(self, excludeHashTags = False): + apiURL = "http://search.twitter.com/trends/current.json" + if excludeHashTags is True: + apiURL += "?exclude=hashtags" + try: + return simplejson.load(urllib.urlopen(apiURL)) + except HTTPError, e: + raise TangoError("getCurrentTrends() failed with a %s error code." % `e.code`, e.code) + + def getDailyTrends(self, date = None, exclude = False): + apiURL = "http://search.twitter.com/trends/daily.json" + questionMarkUsed = False + if date is not None: + apiURL += "?date=" + date + questionMarkUsed = True + if exclude is True: + if questionMarkUsed is True: + apiURL += "&exclude=hashtags" + else: + apiURL += "?exclude=hashtags" + try: + return simplejson.load(urllib.urlopen(apiURL)) + except HTTPError, e: + raise TangoError("getDailyTrends() failed with a %s error code." % `e.code`, e.code) + + def getWeeklyTrends(self, date = None, exclude = False): + apiURL = "http://search.twitter.com/trends/daily.json" + questionMarkUsed = False + if date is not None: + apiURL += "?date=" + date + questionMarkUsed = True + if exclude is True: + if questionMarkUsed is True: + apiURL += "&exclude=hashtags" + else: + apiURL += "?exclude=hashtags" + try: + return simplejson.load(urllib.urlopen(apiURL)) + except HTTPError, e: + raise TangoError("getWeeklyTrends() failed with a %s error code." % `e.code`, e.code) + + def getSavedSearches(self): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/saved_searches.json")) + except HTTPError, e: + raise TangoError("getSavedSearches() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("getSavedSearches() requires you to be authenticated.") + + def showSavedSearch(self, id): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/saved_searches/show/" + id + ".json")) + except HTTPError, e: + raise TangoError("showSavedSearch() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("showSavedSearch() requires you to be authenticated.") + + def createSavedSearch(self, query): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/saved_searches/create.json?query=" + query, "")) + except HTTPError, e: + raise TangoError("createSavedSearch() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("createSavedSearch() requires you to be authenticated.") + + def destroySavedSearch(self, id): + if self.authenticated is True: + try: + return simplejson.load(self.opener.open("http://twitter.com/saved_searches/destroy/" + id + ".json", "")) + except HTTPError, e: + raise TangoError("destroySavedSearch() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("destroySavedSearch() requires you to be authenticated.") + + # The following methods are apart from the other Account methods, because they rely on a whole multipart-data posting function set. + def updateProfileBackgroundImage(self, filename, tile="true"): + if self.authenticated is True: + try: + files = [("image", filename, open(filename).read())] + fields = [] + content_type, body = self.encode_multipart_formdata(fields, files) + headers = {'Content-Type': content_type, 'Content-Length': str(len(body))} + r = urllib2.Request("http://twitter.com/account/update_profile_background_image.json?tile=" + tile, body, headers) + return self.opener.open(r).read() + except HTTPError, e: + raise TangoError("updateProfileBackgroundImage() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("You realize you need to be authenticated to change a background image, right?") + + def updateProfileImage(self, filename): + if self.authenticated is True: + try: + files = [("image", filename, open(filename).read())] + fields = [] + content_type, body = self.encode_multipart_formdata(fields, files) + headers = {'Content-Type': content_type, 'Content-Length': str(len(body))} + r = urllib2.Request("http://twitter.com/account/update_profile_image.json", body, headers) + return self.opener.open(r).read() + except HTTPError, e: + raise TangoError("updateProfileImage() failed with a %s error code." % `e.code`, e.code) + else: + raise TangoError("You realize you need to be authenticated to change a profile image, right?") + + def encode_multipart_formdata(self, fields, files): + BOUNDARY = mimetools.choose_boundary() + CRLF = '\r\n' + L = [] + for (key, value) in fields: + L.append('--' + BOUNDARY) + L.append('Content-Disposition: form-data; name="%s"' % key) + L.append('') + L.append(value) + for (key, filename, value) in files: + L.append('--' + BOUNDARY) + L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)) + L.append('Content-Type: %s' % self.get_content_type(filename)) + L.append('') + L.append(value) + L.append('--' + BOUNDARY + '--') + L.append('') + body = CRLF.join(L) + content_type = 'multipart/form-data; boundary=%s' % BOUNDARY + return content_type, body + + def get_content_type(self, filename): + return mimetypes.guess_type(filename)[0] or 'application/octet-stream' diff --git a/dist/tango-0.6.tar.gz b/dist/tango-0.6.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..8a005c42fdc4417fd37f8799e1dc1d5ee31f13aa GIT binary patch literal 6707 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 JG|d3W0004)?VA7q literal 0 HcmV?d00001 diff --git a/dist/tango-0.6.win32.exe b/dist/tango-0.6.win32.exe new file mode 100644 index 0000000000000000000000000000000000000000..2b48facf30d3e0d4c5bfa871ba80bc2bbb3eb0d8 GIT binary patch literal 67962 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 a|4q%KB*V#0NEnqDhK~%`LTRLK*#7{$*S`?} literal 0 HcmV?d00001 diff --git a/dist/tango-0.7.tar.gz b/dist/tango-0.7.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b5a0defb84e6befee4915d8316b41d619b4fe1e6 GIT binary patch literal 6709 zcmV-58p`D#iwFpg!EZ_e19V|-XKyVqE;lZ8VR8WMJ#BN_Hq!ZO{R)(sR8mfs?AS?W z-1GU|IJtTnC%M>pI-OjH2a%A(GexQdX-B=ue}8rt00~l*BFUDM-dHn^l}9 zl=5g8Z|`)U_a1EQvjd;!PoJv4&(z zxSX^$XZCfUIO+h^PCM__iT>1mXT z$QM34&ip_`p1_v6Kd`;jR+Ek`-kzVb34fdWl}#`0XqW!XQPr5JcK7G`8>J(>P_< zNt_C%$m$D^XW;Tq*&xm!)TH2RSe%Z4MD45$#bNHqu0Xegn_rGQ3)ohu)I{O+{F-eNrIFp+v4=En#|3Nc0)eZdA<7*3f7PB#&LmtBkk z;E!bEDdRxHc#^{32G^uaHL-&M_;EIl!S_;62z}i~!|FQ-5}D?mPMcSPfsamr4>+=@ zkU)pY7zrjwS?D8462d8yX*L*OJ9>s_n_<`(a~L1T2qxnQ!h~kn6$CK|eLRIBBM~FP z{SJ#0Hi^N5_i=zc3>kn8BFQ7*+iBXA48lUCjHwp-geS;SYGNc0 za$|C27*a@w0`&+;gjmM<(4YOtB?P9{PZt;O+6)mx5Y&;35*aQ0{1WLwOuiWKEKGqX zFmNAKQRN~8V#MqPNtKfJ5f1qoDAuEuK)-Pd-;juH}(Niw7cOK zU`L};8EeC2w1*|Nt14%Q0pF4cROHYRiek7of#ePoVvLPyX_XcuQ`rvW~VQ|3-?FCgRlXC@@&-yO=w(FQ4I9o-Rc&%mm{=PUon zjYooSFleRp>OPFB>BBq`J;~z{zY>orO2|u$6zun66vVzk1Gz8|A|z9bfWg?@i$QK4 zdS4O`DOC$Dh_P+(2N>S~##CGED4@0w`5Qn&-Hfnnlo22$A_M?{3DOJncac4pg0u+2 zKT-4g^u^0J=Pw~zhl&o0=s|?DKotWTfA;*JJVMtS4DUMshnstq`p@3()1CYL|1Lfs z#c=4N9{<)z`OxiW0b~J(jJ}{}hwB~sBCjGh5my0uPrP|Qt^ePe|10~SOz(XD|77>+ zu4VsE(f)V#?&tq^@_G1OFOx~HA4ENszcw1K%c-jBx?tx`yWGnDS{G0M)`TuPuTp(L zotlltL-tC~N!WUtWB8ck%Y^>vMOO`C4LbJ`F?8${a|u!08E10XcH>s3YAk>%0D~(KT9B==IqVUClo$(-Q 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 LD{Jm+0LTCUj^!F2 literal 0 HcmV?d00001 diff --git a/dist/tango-0.7.win32.exe b/dist/tango-0.7.win32.exe new file mode 100644 index 0000000000000000000000000000000000000000..3b371e028d1f92a31f6182123218b03035ac89e9 GIT binary patch literal 67963 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 bvVT+a2+44;5fMe@Md2d@#!v>S8}>f{jw``H literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py index f5b217b..b9c3470 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ #!/usr/bin/python __author__ = 'Ryan McGrath ' -__version__ = '0.6' +__version__ = '0.7' # For the love of god, use Pip to install this. @@ -13,7 +13,7 @@ METADATA = dict( author='Ryan McGrath', author_email='ryan@venodesigns.net', description='A new and easy way to access Twitter data with Python.', - license='Tango License', + license='MIT License', url='http://github.com/ryanmcgrath/tango/tree/master', keywords='twitter search api tweet tango', ) diff --git a/tango.egg-info/PKG-INFO b/tango.egg-info/PKG-INFO new file mode 100644 index 0000000..88d5a4e --- /dev/null +++ b/tango.egg-info/PKG-INFO @@ -0,0 +1,17 @@ +Metadata-Version: 1.0 +Name: tango +Version: 0.7 +Summary: A new and easy way to access Twitter data with Python. +Home-page: http://github.com/ryanmcgrath/tango/tree/master +Author: Ryan McGrath +Author-email: ryan@venodesigns.net +License: MIT License +Description: UNKNOWN +Keywords: twitter search api tweet tango +Platform: UNKNOWN +Classifier: Development Status :: 4 - Beta +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: MIT License +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: Communications :: Chat +Classifier: Topic :: Internet diff --git a/tango.egg-info/SOURCES.txt b/tango.egg-info/SOURCES.txt new file mode 100644 index 0000000..ff5194e --- /dev/null +++ b/tango.egg-info/SOURCES.txt @@ -0,0 +1,8 @@ +README +setup.py +tango/tango.py +tango.egg-info/PKG-INFO +tango.egg-info/SOURCES.txt +tango.egg-info/dependency_links.txt +tango.egg-info/requires.txt +tango.egg-info/top_level.txt \ No newline at end of file diff --git a/tango.egg-info/dependency_links.txt b/tango.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tango.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/tango.egg-info/requires.txt b/tango.egg-info/requires.txt new file mode 100644 index 0000000..58cf212 --- /dev/null +++ b/tango.egg-info/requires.txt @@ -0,0 +1,2 @@ +setuptools +simplejson \ No newline at end of file diff --git a/tango.egg-info/top_level.txt b/tango.egg-info/top_level.txt new file mode 100644 index 0000000..67deecb --- /dev/null +++ b/tango.egg-info/top_level.txt @@ -0,0 +1 @@ +tango/tango