yading@7: import httplib yading@7: import oauth yading@7: from lockerEndpoint import Locker yading@7: yading@7: class Oauth7digital(object): yading@7: key = None yading@7: yading@7: SERVER = 'api.7digital.com' yading@7: REQUEST_TOKEN_URL = 'https://%s/1.2/oauth/requesttoken' % SERVER yading@7: ACCESS_TOKEN_URL = 'https://%s/1.2/oauth/accesstoken' % SERVER yading@7: LOCKER_ENDPOINT_URL = 'http://%s/1.2/user/locker' %SERVER yading@7: yading@7: def __init__(self, key, secret, access_token = None): yading@7: self.key = key yading@7: self.secret = secret yading@7: self.access_token = access_token yading@7: yading@7: def request_token(self): yading@7: print '\nOAUTH STEP 1' yading@7: oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.__consumer(), http_url = self.REQUEST_TOKEN_URL, parameters={}) yading@7: print '\nMESSAGE:: %s' %oauth_request yading@7: oauth_request.sign_request(self.__signature_method(), self.__consumer(), None) yading@7: resp = self.__fetch_response(oauth_request, self.__secure_connection()) yading@7: yading@7: token = oauth.OAuthToken.from_string(resp) yading@7: return token yading@7: yading@7: def authorize_request_token(self, token): yading@7: AUTHORIZATION_URL = 'https://account.7digital.com/%s/oauth/authorise' % self.key yading@7: print '\nOAUTH STEP 2' yading@7: auth_url="%s?oauth_token=%s" % (AUTHORIZATION_URL, token.key) yading@7: yading@7: # auth url to go to yading@7: print 'Authorization URL:\n%s' % auth_url yading@7: oauth_verifier = raw_input('Please go to the above URL and authorize the app. Hit return when you have been authorized: ') yading@7: return True yading@7: yading@7: def request_access_token(self, token): yading@7: print '\nOAUTH STEP 3' yading@7: oauth_request = self.__sign_oauth_request(token, self.ACCESS_TOKEN_URL) yading@7: resp = self.__fetch_response(oauth_request, self.__secure_connection()) yading@7: yading@7: token = oauth.OAuthToken.from_string(resp) yading@7: return token yading@7: yading@7: def get_user_locker(self): yading@7: resp = self.__get_locker() yading@7: return Locker(resp).get_content() yading@7: yading@7: def get_artist_from_user_locker(self): yading@7: resp = self.__get_locker() yading@7: return Locker(resp).get_artists() yading@7: yading@7: def get_releases_from_user_locker(self): yading@7: resp = self.__get_locker() yading@7: return Locker(resp).get_releases() yading@7: yading@7: def get_tracks_from_user_locker(self): yading@7: resp = self.__get_locker() yading@7: return Locker(resp).get_tracks() yading@7: yading@7: def get_locker(self): yading@7: resp = self.__get_locker() yading@7: return Locker(resp).get_contents() yading@7: yading@7: def __get_locker(self): yading@7: oauth_request = self.__sign_oauth_request(self.access_token, self.LOCKER_ENDPOINT_URL) yading@7: resp = self.__fetch_response(oauth_request, self.__connection()) yading@7: return resp yading@7: yading@7: def __sign_oauth_request(self, token, url_end_point): yading@7: oauth_request = oauth.OAuthRequest.from_consumer_and_token(self.__consumer(), token=token, http_url = url_end_point, parameters={}) yading@7: yading@7: oauth_request.sign_request(self.__signature_method(), self.__consumer(), token) yading@7: return oauth_request yading@7: yading@7: def __consumer(self): yading@7: return oauth.OAuthConsumer(self.key, self.secret) yading@7: yading@7: def __signature_method(self): yading@7: return oauth.OAuthSignatureMethod_HMAC_SHA1() yading@7: yading@7: def __secure_connection(self): yading@7: return httplib.HTTPSConnection(self.SERVER) yading@7: yading@7: def __connection(self): yading@7: return httplib.HTTPConnection(self.SERVER) yading@7: yading@7: def __fetch_response(self, oauth_request, connection): yading@7: url = oauth_request.to_url() yading@7: connection.request(oauth_request.http_method, url) yading@7: response = connection.getresponse() yading@7: result = response.read() yading@7: yading@7: return result yading@7: