简体   繁体   中英

Getting SoundCloud Access Token with Python

https://github.com/soundcloud/soundcloud-python

I'm using the Python wrapper above, and I am struggling to get the access token.


import soundcloud

client = soundcloud.Client(
    client_id=YOUR_CLIENT_ID,
    client_secret=YOUR_CLIENT_SECRET,
    redirect_uri='http://yourapp.com/callback'
)
redirect(client.authorize_url())

I am able to reach this point and it successfully allows the user to authorize. However I am lost as to how I am supposed to get the access token.

The documentation says the following:

access_token, expires, scope, refresh_token = client.exchange_token(
    code=request.args.get('code'))
render_text("Hi There, %s" % client.get('/me').username)

When I use this, it gives me a 500 error.

On redirect client.authorize_url() , the user will be redirected to a SoundCloud connect screen in their browser and asked to authorize their account with your application.

If the user approves the authorization request, they will be sent to the redirect_uri specified in redirect_uri='http://yourapp.com/callback' . From there, you can extract the code parameter from the query string and use it to obtain an access token.

import soundcloud

# create client object with app credentials
client = soundcloud.Client(client_id='YOUR_CLIENT_ID',
                           client_secret='YOUR_CLIENT_SECRET',
                           redirect_uri='http://example.com/callback')

# exchange authorization code for access token
code = params['code']
access_token = client.exchange_token(code)

This is straight from the Server-Side Authentication docs .

You could use selenium webdriver

pip install --upgrade selenium

to open a browser window, log in to the soundcloud account and get the code.

#!/usr/bin/env python
# coding=utf-8
import soundcloud
from selenium import webdriver

driver = webdriver.Firefox(
    executable_path='<YOUR_PATH_TO>/geckodriver')

CLIENT_ID='<YOUR_CLIENT_ID>'
CLIENT_SECRET='<YOUR_CLIENT_SECRET>'
REDIRECT_URL='<YOUR_REDIRECT_URL>'
client = soundcloud.Client(
    client_id=CLIENT_ID,
    client_secret=CLIENT_SECRET,
    redirect_uri=REDIRECT_URL)

AUTH_URL = client.authorize_url()
driver.get(AUTH_URL) ## open Firefox to access Soundcloud
code = raw_input("WAITING FOR ACCESS... type ENTER")

code = driver.current_url.replace(REDIRECT_URL+'/?code=','')[:-1]
ACCESS_TOKEN = client.exchange_token(code).access_token

USER = client.get('/me').permalink

FILE = "SOUNDCLOUD.%s.access_token" % USER
FILE_W = open(FILE,'w')
FILE_W.write(ACCESS_TOKEN)
FILE_W.close()
driver.quit()

Maybe you'll need to get geckodriver , you can google it to find the one for your OS.

Note that this access_token is not expiring. You don't need a refresh_token . You can print the full response object with:

from pprint import pprint
[...]
code = driver.current_url.replace(REDIRECT_URL+'/?code=','')[:-1]
TOKEN_OBJECT = client.exchange_token(code)
pprint (vars(TOKEN_OBJECT))
ACCESS_TOKEN = TOKEN_OBJECT.access_token
[...]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM