2015-02-06 8 views
2

페이지 매김을 통해 60k + 팔로어 목록을 가져 오는 방법을 알아 내려고합니다. Soundcloud API 페이지 매김 - 8000의 오프셋 제한은 8000을 넘는 전체 목록을 가져올 수 없다는 것을 의미합니까?

var array = []; 
var page_length = 200; 
var num_pages = 40; 
var offset = 0; 

for (i=0; i< num_pages; i++) { 
    SC.get("https://stackoverflow.com/users/" + id + "/followers", {limit: page_length, offset: offset}, 
      function(followers) { 
       for (j=0; j < page_length; j++) { 
        array.push(followers[j]); 
       } 
       if(array[array.length-1] != undefined && array.length == page_length * num_pages) { 
        //success  
       } 
      } 
     ); 
    offset+=page_length; 
} 

나는 API 문서에 따라 200의 최대의 page_length 세트를 가지고 : 지금, 이것은 내가 (나는이 구문이 더 좋을 수 추측하고있어)을하고 있어요 방법이다. 예를 들어 num_pages을 45로 늘리면 해당 반복에 대한 followers[] 배열의 결과는 정의되지 않은 레코드 만 포함합니다. 이는 num_pages*page_length이 8000 오프셋 제한을 초과하기 때문입니다.

이 배열에 8000 개가 넘는 레코드를 가져올 수있는 방법이 있습니까?

+0

http://stackoverflow.com/questions/9668311/soundcloud-api-throttling – Timmerz

+0

@Timmerz 메신저 이러한 한계를 알고 있습니다. 그 사용자는 하나의 요청에서 200 개 이상을 얻으려고했습니다.왜 8000을 초과하는 결과 집합을 검색 할 수있는 실제적인 방법이 없을지 궁금합니다. – mschwebl

+0

그 스레드에서 그의 대답을 기반으로 8000이 최대 오프셋 인 것처럼 보입니다. 나는 사운드 클 라우드 API에 익숙하지 않지만 API를 통해 많은 양의 데이터를 제공하고 싶지 않다고 가정합니다. – Timmerz

답변

1

SoundCloud가 API를 "업데이트 한"것을주의해야하며 3 월 3 일 이후에는 "오프셋"매개 변수가있는 API를 사용할 수 없습니다. 나중에 제대로 작동하려면 코드를 변경해야합니다.

처음에는 SoundCloud API가 기본적으로 제한을 50으로 설정했으며 제한을 200 (최대)으로 설정할 수 있습니다.

두 번째 것은 요청을 보낸 후에 대개 응답에 "next_href"커서가 포함되어 있습니다. 팔로워 200 명. SoundCloud가 변경되었습니다. URL에 'linked_partitioning'매개 변수를 추가하지 않으면 처음 200 명의 팔로어 만 받게됩니다. 매개 변수를 추가하면 next_href이 표시됩니다.

num_pages를 40으로 설정 한 이유는 무엇입니까? 귀하의 경우, 나는 추종자 200 명을 가져와 내 배열에 넣을 것입니다. 그런 다음 next_href - 커서를 사용하여 다음 200 명의 팔로어를 가져옵니다 (등등 ...). 응답에 next_href이 없으면 어떤 추종자도 남지 않습니다.

var page_size = 200; 

SC.get("https://stackoverflow.com/users/" + id + "/followers", { limit: page_size, linked_partitioning: 1 }, function(followers) { 
    // do your stuff here with every 200 followers (as long as there are followers) 
}); 
0

은 내가 여기에 조금 늦게 해요 알고 있지만 나는 그것이 '다음'버튼을 클릭 이벤트와 작업 얻을 관리했습니다 :

는 는 자바 스크립트에서

그것은 다음과 같이 생각 것 다음과 같이 : 지금이 문제를 개선하기 위해 노력하고있어

var nextCursor; 
 

 
function next() { 
 
    SC.get('/users/' + userId + '/followers', { 
 

 
    limit: 200, 
 
    linked_partitioning: 1, 
 
    cursor: nextCursor 
 

 
    }).then(function(followers) { 
 

 
    var nextHref = followers.next_href; 
 
    nextCursor = nextHref.substr(nextHref.length - 13); 
 

 
    $(followers.collection).each(function(i) { 
 

 
     console.log(followers.collection[i]) 
 

 
    }); 
 
    }); 
 
} 
 

 
$("#next-btn").click(function() { 
 
    next(); 
 
});

는 '검색'버튼을 클릭 한 번 모든 추종자를 반환하도록.

가장 가까운 것은 페이지 제한을 100으로 설정하고 전체 팔로어를 100으로 나누고 변수에 저장하는 것입니다 (루프에서 1 씩 증가시킬 수 있도록 - 이상적이지는 않지만 그 순간에 제공 될 것입니다) 그리고 'x'가 총 추종자보다 적은 while 루프에서 GET 요청을 래핑하십시오. 그러나 'nextCursor'변수가 업데이트되지 않으므로 결과의 첫 번째 페이지 만 반환됩니다.

누구나 가능한 방법에 대한 아이디어가 있습니까?

var userId; 
 
var totalFollowers; 
 

 
function getUser() { 
 

 
    SC.get('/users/' + userName, {}).then(function(user) { 
 
    userId = user.id; 
 
    totalFollowers = user.followers_count/100; 
 
    }) 
 

 
} 
 

 
function getFollowers() { 
 

 
    var x = 1; 
 

 
    while (x < totalFollowers) { 
 
    var nextCursor; 
 
    SC.get('/users/' + userId + '/followers', { 
 

 
     limit: 100, 
 
     linked_partitioning: 1, 
 
     cursor: nextCursor 
 

 
    }).then(function(followers) { 
 

 
     $(followers.collection).each(function(i) { 
 

 
     var nextHref = followers.next_href; 
 
     nextCursor = nextHref.substr(nextHref.length - 13); 
 
     console.log(nextCursor) 
 

 
     }); 
 
    }); 
 
    x++; 
 
    } 
 
}