【问题标题】:Soundcloud API - Adding/Removing Songs from Groups - 404 ErrorSoundcloud API - 从组中添加/删除歌曲 - 404 错误
【发布时间】:2013-11-30 19:25:37
【问题描述】:

我一直在尝试使用 Soundcloud API 在群组中添加和删除歌曲。我正在使用 soundcloud-python 包装器使我能够轻松地做到这一点。

我的两个身份验证流程都正常工作(使用 OAuth2 或直接使用用户凭据),我可以使用 python 客户端通过执行如下调用来获取有关登录用户等的信息:

print client.get('/me').username

这表明我已经正确通过了授权,正如我所说,我已经通过这两种方法得到了这个工作。

我的问题是,当我尝试发出以下请求(作为示例提供以从组中添加/删除歌曲)时,我总是会收到 404 错误,无论组中是否已存在曲目(来自示例关闭 Soundcloud API 文档,在 "Contributing Sounds to a Group" 下):

# contribute track to group
group = client.put('/groups/%d/contributions/%d' % (group.id, track.id))

如果我通过客户端对象对 /groups/{group-id}/contributions/{track-id} 执行任何功能,我总是会收到 404 错误。如果我未通过身份验证,我将收到 401 错误。我已经 100% 确定我使用了 work group_id/track_id 组合,方法是通过 API 控制台对其进行测试,并在必要时对值进行硬编码以证明操作。

这让我感到困惑 - 如果我在 API 控制台(Soundcloud API 网站上)中使用与 python 包装器失败的相同形式的 URI,并且我通过 OAuth 进行身份验证,那么 GET/PUT 和 DELETE 全部在通过 soundcloud-python 包装器失败的相同 group_id 和 track_id 上表现如预期。

还有其他人对此有任何问题吗?他们有这个工作吗?

非常感谢您的帮助!

【问题讨论】:

  • 我刚刚尝试使用 Soundcloud Ruby SDK 实现一个简单版本,它的行为符合预期(并且已通过 Soundcloud API 控制台观察到)。因此,我认为这是 Python SDK (soundcloud-python) 的一个问题

标签: soundcloud


【解决方案1】:

404 错误提示您未通过身份验证。如果那不是问题,那么 http://developers.soundcloud.com/docs/api/guide#uploading 说(在“为组贡献声音”中):

... 同样,您也可以删除贡献。 (python示例)

 import soundcloud

 # create a client object with access token
 client = soundcloud.Client(access_token='YOUR_ACCESS_TOKEN')

 # delete track id 59 from group id 123
 client.delete('/groups/123/contributions/59')

【讨论】:

  • 也就是说,我尝试仅使用 javascript 编写一个示例(以及一些 jQuery),但从阅读开发人员指南来看,它似乎没有按预期工作,所以我添加了另一个问题link
  • 一个未经身份验证的错误通常返回为 401 我到目前为止发现...我认为这是 Python SDK 的一个问题,但我再也没有机会再看下去了!我通过迁移到 Ruby 解决了这个问题。
  • 很抱歉没有回复 - 我没有打开电子邮件通知,也没有注意到回复!感谢您花时间回答!
  • 别担心回复 ;-) 我现在也确定这是 API 示例的问题。不确定它是否会对您有所帮助,但我已经修补了 Soundcloud javacript API 示例,以便它确实工作:link,我正在玩的一些测试已经结束:link
【解决方案2】:

更新

我在下面链接到的拉取请求已被接受并合并到 API 包装器中。

只需从 Github 获取更新的源代码,这应该会修复。

附言抱歉更新晚了。


/contributions 端点有问题 - 请参阅 this github issue

我已设法破解 API 以使其正常工作,直到 SoundCloud 方面的错误得到修复。 对client.py文件做如下修改:

def _resolve_resource_name(self, name):
    [...]
    name = name.rstrip('/').lstrip('/')
    if name[-13:] == 'contributions':
        return '%s%s/%s' % (self.scheme, self.host, name)
    return '%s%s/%s.json' % (self.scheme, self.host, name)

或查看this pull request

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多