Soundcloud API返回的项目少于给定的限制(尽管还有更多)

时间:2014-06-05 14:42:05

标签: javascript jquery api soundcloud

我使用Soundcloud JavaScript SDK获取特定用户的收藏夹。

不幸的是,即使我提供了限制(默认值为50),它也不会返回预期数量的项目。

例如,以下代码返回197项,但收藏数量超过900。

SC.get('/users/3684392/favorites',
      { 'limit': 200, 'offset': 0 },
      function(data){
          console.log(data.length);
      }
);

jsFiddle

是否无法保证退回的物品金额?

3 个答案:

答案 0 :(得分:3)

我一直有同样的问题。对于/ favorites端点,似乎限制了参数。

除非限制参数有限,否则您可以通过以下方式获取所有用户的最爱:

var req = {
    path: '/users/3684392/favorites',
    params: { 
        limit: 200, 
        offset: 0 
    }
};

var getAll = function(req, collection, callback) {
    SC.get('req.path', { 
        'limit': req.params.limit, 
        'offset': req.params.offset 
    }, function(data){
        collection = collection.concat(data);

        if (data.length === 0) {
            callback(collection);
        }
        else {
            req.params.offset += data.length;
            getAll(req, collection, callback);
        }
    });

getAll(req, [], function(collection) {
    console.log(collection);
});

a fork of your jsFiddle using the same technique

如果您尝试获取特定数量的结果,还可以调整限制。

例如,如果您想要200并获得196,请将偏移设置为196并将其限制为4.在下一次调用后再次检查。不过,等待他们解决问题你可能会更好。

答案 1 :(得分:0)

您可以在此处尝试此代码:

var page_size = 200;

var getstring = '/users/3684392/favorites';

SC.get(getstring,{ limit: page_size }, function(favs) {
    for (var i = 0; i < favs.length; i++) {    
        $('#result').append(favs[i].title + ': ' + favs[i].permalink_url + '<br/>');
    }
});

SC.get(getstring,{ limit: page_size, offset: page_size}, function(favs) {
    for (var i = 0; i < favs.length; i++) {
        $('#result').append(favs[i].title + ': ' + favs[i].permalink_url + '<br/>');
    }
});  

http://jsfiddle.net/iambnz/gwpAM/

答案 2 :(得分:0)

我们目前正在重做API的一些内部部分,所以这有点笨拙(虽然您仍然可以按照其他回复的建议来解决它)。

Menawhile我建议使用特殊的分页参数(即将记录) - https://stackoverflow.com/a/15259849/236135,所以你的链接是:

http://api.soundcloud.com/users/3684392/favorites.json?client_id=YOUR_CLIENT_ID&linked_partitioning=1

干杯