0

私は、Soundcloudに接続しているユーザーに、SCアカウントを使用してSoundcloudに保存されている新しいプレイリスト(セット)を作成する機能を提供しようとしています。非常に基本的です。テストケースとして、私がテストしている例は、別のサウンドIDを追加したことを除いて、 Soundcloud開発ドキュメントからほぼ正確に取得されています。

<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

私はいくつかの異なる解決策を試しましたが、自分でurlリクエストを作成し、それと一緒にclient_idを投稿しましたが、成功しませんでした。

開発ドキュメントにも矛盾があることに気づきました。私は、開発ドキュメントにプレイリストの作成JS SDKの例があることに気づきましたが、APIGEE(API)コンソールには投稿/ playlistsリクエストへの参照はなく、取得のための/playlistsだけです...これはありません現在のSoundcloudAPIにも存在しますか?

もう1つ頭に浮かんだのは、422エラーだったので、ユーザーが元々sdkを使用してトラックをアップロードしている場合にのみ、プレイリストにトラックを追加できるということでした。

他の誰かがこの問題に遭遇しましたか?誰かがそれに対する解決策を見つけましたか?

ありがとう、

4

1 に答える 1

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]"];

もちろん、正確なコードは使用している言語によって異なります。私にとっての秘訣は、すべての括弧が正しいキーを取得することでした。

于 2013-01-19T18:09:49.893 に答える