使用JS SDK创建新的Soundcloud播放列表(set)将返回422

时间:2012-12-11 17:49:28

标签: javascript api soundcloud

我试图让与Soundcloud连接的用户能够使用他们的SC帐户创建存储在Soundcloud上的新播放列表(集)。非常基本的。作为测试用例,我正在测试的示例几乎完全取自Soundcloud dev docs,除了我添加了不同的声音ID。

<script src="http://connect.soundcloud.com/sdk.js"></script>
<script>
// initialize client with app credentials
SC.initialize({
  client_id: 'MY_CLIENT_ID',
  redirect_uri: 'http://localhost.local/~****/sc/callback.html'
});

// initiate auth popup and create new playlist
SC.connect(function() {
    SC.get('/me', function(me) {
        console.log(me.username);
    });

    var tracks = [12573606].map(function(id) { return { id: id }; });
    SC.post('/playlists', {
        playlist: { title: 'My Playlist', tracks: tracks }
    });
});

来自SC.post的副本及其响应如下:

POST https://api.soundcloud.com/playlists 422 (Unknown Error) sdk.js:1
window.SC.SC.Helper.merge._xhrRequest sdk.js:1
window.SC.SC.Helper.merge._request sdk.js:1
window.SC.SC.Helper.merge._apiRequest sdk.js:1
window.SC.SC.Helper.merge.post sdk.js:1

(anonymous function) localhost.local:21
(anonymous function) sdk.js:1
f.onreadystatechange sdk.js:1

XHR finished loading: "https://api.soundcloud.com/playlists". sdk.js:1
window.SC.SC.Helper.merge._xhrRequest sdk.js:1
window.SC.SC.Helper.merge._request sdk.js:1
window.SC.SC.Helper.merge._apiRequest sdk.js:1
window.SC.SC.Helper.merge.post sdk.js:1
(anonymous function) localhost.local:21
(anonymous function) sdk.js:1
f.onreadystatechange sdk.js:1

Uncaught TypeError: object is not a function sdk.js:1
(anonymous function) sdk.js:1
f.onreadystatechange

我尝试了几种不同的解决方案以及自己创建网址请求并将其与我的client_id一起发布但是没有取得任何成功。

我也注意到开发文档中的不一致。我注意到在开发文档中有一个创建播放列表JS SDK示例但是在APIGEE(API)控制台中没有引用帖子/播放列表请求,只是/播放列表获取...这不是甚至存在于当前的Soundcloud api中?

我想到的另一件事是,因为它是422错误,你只能在用户使用sdk上传原曲目时才向播放列表添加曲目吗?

还有其他人遇到过这个问题吗?有没有人找到任何解决方案?

谢谢,

1 个答案:

答案 0 :(得分:2)

我通过Cocoa / Objective C使用SoundCloud API,并且在尝试更新播放列表时遇到错误422的问题。我的解决方案是理解参数值必须是轨道“id”字符串的数组,并且参数键是“playlist [tracks] [] [id]”。

因此,对于Objective C,代码是:

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
NSString *trackList = @"60832750,61311756,60832782"; // for example
NSArray *tracks = [self.trackList componentsSeparatedByString:@","];
[parameters setObject:tracks forKey:@"playlist[tracks][][id]"];

当然,您的确切代码取决于您使用的语言。对我来说,诀窍是获得该密钥,其所有括号都正确。