使用Python获取SoundCloud访问令牌

时间:2015-11-25 00:26:16

标签: python soundcloud

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

我正在使用上面的Python包装器,我正在努力获取访问令牌。

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())

我能够达到这一点,并且它成功地允许用户进行授权。但是我很遗憾我应该如何获得访问令牌。

文档说明如下:

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

当我使用它时,它会给我一个500错误。

2 个答案:

答案 0 :(得分:0)

redirect client.authorize_url()上,用户将被重定向到浏览器中的SoundCloud连接屏幕,并被要求通过您的应用程序授权他们的帐户。

如果用户批准了授权请求,则会将其发送到redirect_uri中指定的redirect_uri='http://yourapp.com/callback'。从那里,您可以从查询字符串中提取代码参数,并使用它来获取访问令牌。

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)

直接来自Server-Side Authentication docs

答案 1 :(得分:0)

您可以使用selenium webdriver

#!/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()

打开浏览器窗口,登录soundcloud帐户并获取代码。

geckodriver

也许你需要获得access_token,你可以谷歌找到你的操作系统。

请注意,此refresh_token未过期。您不需要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 [...] 。 您可以使用以下命令打印完整的响应对象:

$sql = "SELECT name,page FROM menu WHERE permid & ".getuserdets($liuid,'page_access');