如何使用Python将文件上传到Soundcloud?

6 投票
1 回答
2905 浏览
提问于 2025-04-17 12:02

我正在开发一个应用程序,能够记录人们说的话,生成一个音频文件,然后把它上传到SoundCloud,并获取上传后音轨的链接,使用的是Python。

我用PyAudio来录音并生成一个音频文件——也就是一个波形文件。

但是我需要知道怎么把这个文件上传到SoundCloud。经过研究,我发现有一个Python的工具可以用来操作SoundCloud的API,另外还有一个叫Poster的Python库,可以很方便地把文件上传到SoundCloud。

我该怎么做呢?我之前没有用过这种API的东西,也找不到合适的教程或指南来教我怎么使用它。所以如果有人能帮我解答这个问题,请在这里回答我。

我该如何使用这个 SoundCloud Python API工具,结合Python库 Poster,来上传文件到SoundCloud呢?

1 个回答

7

我们刚刚发布了一个新的Python API封装库。你可以在PyPi上找到它,或者从我们的Github账号获取。要上传一首歌曲,首先需要通过支持的OAuth2认证流程获取一个访问令牌。你可以在README文件中了解更多信息。如果你想让我详细解释一下认证部分,我可以更新我的回答。

要获取访问令牌,首先需要在soundcloud.com上注册你的应用。你需要提供一个URI,用户在授权你的应用后会被引导到这个地址,同时你会获得一个客户端ID和客户端密钥。拿到这些信息后,把它们传递给客户端构造函数:

import soundcloud
client = soundcloud.Client(client_id=YOUR_CLIENT_ID,
                           client_secret=YOUR_CLIENT_SECRET,
                           redirect_uri="http://your/redirect/uri")

然后你就可以把用户重定向到授权网址,以便他们授权你的应用。如果用户没有登录,他们会被送到soundcloud.com登录并批准你的应用访问权限。根据你使用的框架(比如Django、Flask等),可能会像这样:

return redirect(client.authorize_url)

用户批准你的应用访问后,会被重定向到你在注册应用时指定的重定向URI。这个网址会带有一个查询字符串,其中包含一个'code'参数,你可以用这个参数来获取访问令牌。同样,根据你使用的框架,可能会像这样:

code = request.params.get('code')
token = client.exchange_token(code)
print token.access_token  # don't actually print it, just showing how you would access it

你可能需要把访问令牌存储起来(比如放在MySQL或Redis这样的数据存储中),这样用户下次想访问SoundCloud时就可以使用。

一旦你拿到访问令牌,上传一首歌曲应该就很简单了。拿到你的音频文件后,只需向tracks资源发送一个POST请求。这里有个例子:

import soundcloud

client = soundcloud.Client(access_token='YOUR_ACCESS_TOKEN')
track = client.post('/tracks', track={
    'title': 'The title you want to give your track',
    'sharing': 'private',  # make this 'public' if you want
    'asset_data': open('yourtrack.mp4', 'rb')
})

你会收到一个曲目资源,然后可以用它获取SoundCloud的链接:

print track.permalink_url

希望这些信息对你有帮助!如果你有任何问题,请告诉我。

撰写回答