soundcloud python/php apis, recorder python script so far.
This commit is contained in:
parent
b3e111b0a0
commit
f68a8f67ea
109 changed files with 24297 additions and 10 deletions
157
python_apps/soundcloud-api/oauth/example/client.py
Normal file
157
python_apps/soundcloud-api/oauth/example/client.py
Normal file
|
@ -0,0 +1,157 @@
|
|||
'''
|
||||
Example consumer.
|
||||
'''
|
||||
import httplib
|
||||
import time
|
||||
import oauth.oauth as oauth
|
||||
import webbrowser
|
||||
from scapi import util
|
||||
|
||||
SERVER = 'sandbox-soundcloud.com' # Change to soundcloud.com to reach the live site
|
||||
PORT = 80
|
||||
|
||||
REQUEST_TOKEN_URL = 'http://api.' + SERVER + '/oauth/request_token'
|
||||
ACCESS_TOKEN_URL = 'http://api.' + SERVER + '/oauth/access_token'
|
||||
AUTHORIZATION_URL = 'http://' + SERVER + '/oauth/authorize'
|
||||
|
||||
CALLBACK_URL = ''
|
||||
RESOURCE_URL = "http://api." + SERVER + "/me"
|
||||
|
||||
# key and secret granted by the service provider for this consumer application - same as the MockOAuthDataStore
|
||||
CONSUMER_KEY = 'JysXkO8ErA4EluFnF5nWg'
|
||||
CONSUMER_SECRET = 'fauVjm61niGckeufkmMvgUo77oWzRHdMmeylJblHk'
|
||||
|
||||
# example client using httplib with headers
|
||||
class SimpleOAuthClient(oauth.OAuthClient):
|
||||
|
||||
def __init__(self, server, port=httplib.HTTP_PORT, request_token_url='', access_token_url='', authorization_url=''):
|
||||
self.server = server
|
||||
self.port = port
|
||||
self.request_token_url = request_token_url
|
||||
self.access_token_url = access_token_url
|
||||
self.authorization_url = authorization_url
|
||||
self.connection = httplib.HTTPConnection("%s:%d" % (self.server, self.port))
|
||||
|
||||
def fetch_request_token(self, oauth_request):
|
||||
# via headers
|
||||
# -> OAuthToken
|
||||
print oauth_request.to_url()
|
||||
#self.connection.request(oauth_request.http_method, self.request_token_url, headers=oauth_request.to_header())
|
||||
self.connection.request(oauth_request.http_method, oauth_request.to_url())
|
||||
response = self.connection.getresponse()
|
||||
print "response status", response.status
|
||||
return oauth.OAuthToken.from_string(response.read())
|
||||
|
||||
def fetch_access_token(self, oauth_request):
|
||||
# via headers
|
||||
# -> OAuthToken
|
||||
|
||||
# This should proably be elsewhere but stays here for now
|
||||
oauth_request.set_parameter("oauth_signature", util.escape(oauth_request.get_parameter("oauth_signature")))
|
||||
self.connection.request(oauth_request.http_method, self.access_token_url, headers=oauth_request.to_header())
|
||||
response = self.connection.getresponse()
|
||||
resp = response.read()
|
||||
print "*" * 90
|
||||
print "response:", resp
|
||||
print "*" * 90
|
||||
|
||||
return oauth.OAuthToken.from_string(resp)
|
||||
|
||||
def authorize_token(self, oauth_request):
|
||||
webbrowser.open(oauth_request.to_url())
|
||||
raw_input("press return when authorizing is finished")
|
||||
|
||||
return
|
||||
|
||||
# via url
|
||||
# -> typically just some okay response
|
||||
self.connection.request(oauth_request.http_method, oauth_request.to_url())
|
||||
response = self.connection.getresponse()
|
||||
return response.read()
|
||||
|
||||
def access_resource(self, oauth_request):
|
||||
print "resource url:", oauth_request.to_url()
|
||||
webbrowser.open(oauth_request.to_url())
|
||||
|
||||
return
|
||||
|
||||
# via post body
|
||||
# -> some protected resources
|
||||
self.connection.request('GET', oauth_request.to_url())
|
||||
response = self.connection.getresponse()
|
||||
return response.read()
|
||||
|
||||
def run_example():
|
||||
|
||||
# setup
|
||||
print '** OAuth Python Library Example **'
|
||||
client = SimpleOAuthClient(SERVER, PORT, REQUEST_TOKEN_URL, ACCESS_TOKEN_URL, AUTHORIZATION_URL)
|
||||
consumer = oauth.OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET)
|
||||
signature_method_plaintext = oauth.OAuthSignatureMethod_PLAINTEXT()
|
||||
signature_method_hmac_sha1 = oauth.OAuthSignatureMethod_HMAC_SHA1()
|
||||
pause()
|
||||
# get request token
|
||||
print '* Obtain a request token ...'
|
||||
pause()
|
||||
oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer, http_url=client.request_token_url)
|
||||
#oauth_request.sign_request(signature_method_plaintext, consumer, None)
|
||||
oauth_request.sign_request(signature_method_hmac_sha1, consumer, None)
|
||||
|
||||
print 'REQUEST (via headers)'
|
||||
print 'parameters: %s' % str(oauth_request.parameters)
|
||||
pause()
|
||||
#import pdb; pdb.set_trace()
|
||||
|
||||
token = client.fetch_request_token(oauth_request)
|
||||
print 'GOT'
|
||||
print 'key: %s' % str(token.key)
|
||||
print 'secret: %s' % str(token.secret)
|
||||
pause()
|
||||
|
||||
print '* Authorize the request token ...'
|
||||
pause()
|
||||
oauth_request = oauth.OAuthRequest.from_token_and_callback(token=token, callback=CALLBACK_URL, http_url=client.authorization_url)
|
||||
print 'REQUEST (via url query string)'
|
||||
print 'parameters: %s' % str(oauth_request.parameters)
|
||||
pause()
|
||||
# this will actually occur only on some callback
|
||||
response = client.authorize_token(oauth_request)
|
||||
print 'GOT'
|
||||
print response
|
||||
pause()
|
||||
|
||||
# get access token
|
||||
print '* Obtain an access token ...'
|
||||
pause()
|
||||
oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer, token=token, http_url=client.access_token_url)
|
||||
oauth_request.sign_request(signature_method_hmac_sha1, consumer, token)
|
||||
print 'REQUEST (via headers)'
|
||||
print 'parameters: %s' % str(oauth_request.parameters)
|
||||
pause()
|
||||
token = client.fetch_access_token(oauth_request)
|
||||
print 'GOT'
|
||||
print 'key: %s' % str(token.key)
|
||||
print 'secret: %s' % str(token.secret)
|
||||
pause()
|
||||
|
||||
# access some protected resources
|
||||
print '* Access protected resources ...'
|
||||
pause()
|
||||
parameters = {}
|
||||
oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer, token=token, http_method='GET', http_url=RESOURCE_URL, parameters=parameters)
|
||||
oauth_request.sign_request(signature_method_hmac_sha1, consumer, token)
|
||||
print 'REQUEST (via get body)'
|
||||
print 'parameters: %s' % str(oauth_request.parameters)
|
||||
pause()
|
||||
params = client.access_resource(oauth_request)
|
||||
print 'GOT'
|
||||
print 'non-oauth parameters: %s' % params
|
||||
pause()
|
||||
|
||||
def pause():
|
||||
print ''
|
||||
time.sleep(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
run_example()
|
||||
print 'Done.'
|
167
python_apps/soundcloud-api/oauth/example/server.py
Normal file
167
python_apps/soundcloud-api/oauth/example/server.py
Normal file
|
@ -0,0 +1,167 @@
|
|||
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
|
||||
import urllib
|
||||
|
||||
import oauth.oauth as oauth
|
||||
|
||||
REQUEST_TOKEN_URL = 'https://photos.example.net/request_token'
|
||||
ACCESS_TOKEN_URL = 'https://photos.example.net/access_token'
|
||||
AUTHORIZATION_URL = 'https://photos.example.net/authorize'
|
||||
RESOURCE_URL = 'http://photos.example.net/photos'
|
||||
REALM = 'http://photos.example.net/'
|
||||
|
||||
# example store for one of each thing
|
||||
class MockOAuthDataStore(oauth.OAuthDataStore):
|
||||
|
||||
def __init__(self):
|
||||
self.consumer = oauth.OAuthConsumer('key', 'secret')
|
||||
self.request_token = oauth.OAuthToken('requestkey', 'requestsecret')
|
||||
self.access_token = oauth.OAuthToken('accesskey', 'accesssecret')
|
||||
self.nonce = 'nonce'
|
||||
|
||||
def lookup_consumer(self, key):
|
||||
if key == self.consumer.key:
|
||||
return self.consumer
|
||||
return None
|
||||
|
||||
def lookup_token(self, token_type, token):
|
||||
token_attrib = getattr(self, '%s_token' % token_type)
|
||||
if token == token_attrib.key:
|
||||
return token_attrib
|
||||
return None
|
||||
|
||||
def lookup_nonce(self, oauth_consumer, oauth_token, nonce):
|
||||
if oauth_token and oauth_consumer.key == self.consumer.key and (oauth_token.key == self.request_token.key or token.key == self.access_token.key) and nonce == self.nonce:
|
||||
return self.nonce
|
||||
else:
|
||||
raise oauth.OAuthError('Nonce not found: %s' % str(nonce))
|
||||
return None
|
||||
|
||||
def fetch_request_token(self, oauth_consumer):
|
||||
if oauth_consumer.key == self.consumer.key:
|
||||
return self.request_token
|
||||
return None
|
||||
|
||||
def fetch_access_token(self, oauth_consumer, oauth_token):
|
||||
if oauth_consumer.key == self.consumer.key and oauth_token.key == self.request_token.key:
|
||||
# want to check here if token is authorized
|
||||
# for mock store, we assume it is
|
||||
return self.access_token
|
||||
return None
|
||||
|
||||
def authorize_request_token(self, oauth_token):
|
||||
if oauth_token.key == self.request_token.key:
|
||||
# authorize the request token in the store
|
||||
# for mock store, do nothing
|
||||
return self.request_token
|
||||
return None
|
||||
|
||||
class RequestHandler(BaseHTTPRequestHandler):
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.oauth_server = oauth.OAuthServer(MockOAuthDataStore())
|
||||
self.oauth_server.add_signature_method(oauth.OAuthSignatureMethod_PLAINTEXT())
|
||||
self.oauth_server.add_signature_method(oauth.OAuthSignatureMethod_HMAC_SHA1())
|
||||
BaseHTTPRequestHandler.__init__(self, *args, **kwargs)
|
||||
|
||||
# example way to send an oauth error
|
||||
def send_oauth_error(self, err=None):
|
||||
# send a 401 error
|
||||
self.send_error(401, str(err.message))
|
||||
# return the authenticate header
|
||||
header = oauth.build_authenticate_header(realm=REALM)
|
||||
for k, v in header.iteritems():
|
||||
self.send_header(k, v)
|
||||
|
||||
def do_GET(self):
|
||||
|
||||
# debug info
|
||||
#print self.command, self.path, self.headers
|
||||
|
||||
# get the post data (if any)
|
||||
postdata = None
|
||||
if self.command == 'POST':
|
||||
try:
|
||||
length = int(self.headers.getheader('content-length'))
|
||||
postdata = self.rfile.read(length)
|
||||
except:
|
||||
pass
|
||||
|
||||
# construct the oauth request from the request parameters
|
||||
oauth_request = oauth.OAuthRequest.from_request(self.command, self.path, headers=self.headers, postdata=postdata)
|
||||
|
||||
# request token
|
||||
if self.path.startswith(REQUEST_TOKEN_URL):
|
||||
try:
|
||||
# create a request token
|
||||
token = self.oauth_server.fetch_request_token(oauth_request)
|
||||
# send okay response
|
||||
self.send_response(200, 'OK')
|
||||
self.end_headers()
|
||||
# return the token
|
||||
self.wfile.write(token.to_string())
|
||||
except oauth.OAuthError, err:
|
||||
self.send_oauth_error(err)
|
||||
return
|
||||
|
||||
# user authorization
|
||||
if self.path.startswith(AUTHORIZATION_URL):
|
||||
try:
|
||||
# get the request token
|
||||
token = self.oauth_server.fetch_request_token(oauth_request)
|
||||
callback = self.oauth_server.get_callback(oauth_request)
|
||||
# send okay response
|
||||
self.send_response(200, 'OK')
|
||||
self.end_headers()
|
||||
# return the callback url (to show server has it)
|
||||
self.wfile.write('callback: %s' %callback)
|
||||
# authorize the token (kind of does nothing for now)
|
||||
token = self.oauth_server.authorize_token(token)
|
||||
self.wfile.write('\n')
|
||||
# return the token key
|
||||
token_key = urllib.urlencode({'oauth_token': token.key})
|
||||
self.wfile.write('token key: %s' % token_key)
|
||||
except oauth.OAuthError, err:
|
||||
self.send_oauth_error(err)
|
||||
return
|
||||
|
||||
# access token
|
||||
if self.path.startswith(ACCESS_TOKEN_URL):
|
||||
try:
|
||||
# create an access token
|
||||
token = self.oauth_server.fetch_access_token(oauth_request)
|
||||
# send okay response
|
||||
self.send_response(200, 'OK')
|
||||
self.end_headers()
|
||||
# return the token
|
||||
self.wfile.write(token.to_string())
|
||||
except oauth.OAuthError, err:
|
||||
self.send_oauth_error(err)
|
||||
return
|
||||
|
||||
# protected resources
|
||||
if self.path.startswith(RESOURCE_URL):
|
||||
try:
|
||||
# verify the request has been oauth authorized
|
||||
consumer, token, params = self.oauth_server.verify_request(oauth_request)
|
||||
# send okay response
|
||||
self.send_response(200, 'OK')
|
||||
self.end_headers()
|
||||
# return the extra parameters - just for something to return
|
||||
self.wfile.write(str(params))
|
||||
except oauth.OAuthError, err:
|
||||
self.send_oauth_error(err)
|
||||
return
|
||||
|
||||
def do_POST(self):
|
||||
return self.do_GET()
|
||||
|
||||
def main():
|
||||
try:
|
||||
server = HTTPServer(('', 8080), RequestHandler)
|
||||
print 'Test server running...'
|
||||
server.serve_forever()
|
||||
except KeyboardInterrupt:
|
||||
server.socket.close()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Add table
Add a link
Reference in a new issue