我使用Soundcloud JavaScript SDK获取特定用户的收藏夹。
不幸的是,即使我提供了限制(默认值为50),它也不会返回预期数量的项目。
例如,以下代码返回197项,但收藏数量超过900。
SC.get('/users/3684392/favorites',
{ 'limit': 200, 'offset': 0 },
function(data){
console.log(data.length);
}
);
是否无法保证退回的物品金额?
答案 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/>');
}
});
答案 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
干杯