2011-10-29 1 views
9

25 개 이상의 메시지를 게시 페치하는 방법. 내가 제한 매개 변수를 설정하면, 내 코드는 내가 restfb를 사용하는 모든 메시지를 게시 얻으려고

는 Parameter.with ("제한", 100)

, 그것은 100 개의 메시지를 제공하지만 난 후 메시지를 가져 오는에 제한하고 싶지 않아요. 그래서,

제한 매개 변수를 설정하지 않고 검색 기준과 일치하는 게시물 메시지의 전체 목록을 얻을 수 있습니까?

+0

모든 검색어에 대해 기본 설정 값 25가 반환됩니다. 한계를 넘어서는 한계 매개 변수를 사용해야합니다. –

+0

FB는 제한된 결과 크기로 기계에 많은 부하를 발생시키지 않으므로 '제한'을 처리해야한다고 생각합니다. – micfra

+0

예, 방법이 있습니다 ... – beinghuman

답변

2

FB에서 무제한 결과를 가져올 방법이 없습니다. 기본 제한은 25로 설정되어 있습니다. 알고 계신대로 limit 매개 변수를 사용하여 변경할 수 있습니다. 웹 검색 제한을위한 상위 경계를 찾지 못했습니다. 어쩌면, 당신은 매우 높은 금액으로 설정할 수 있습니다.

5

아마도 루프를 사용해 볼 수 있습니다. FB는 매번 1000을 넘을 수 없으므로 루프를 사용하여 전체 피드를 가져올 수 있습니다. 다음은이 같은 오프셋 사용 : 저는 최근 시험으로

변수와 그 값이 100020003000 될 것입니다 될 것입니다 오프셋
Parameter.with("limit", 1000)); 
Parameter.with("offset", offset)); 

...

0

, 당신은 아무것도 지정할 필요가 없습니다. 연결 클래스는이 방법의 Iterable을 구현

  • 25 개 결과
  • hasNext 검사를 가져, 그 결과 25 개 그래서

의 다음 페이지를 가져옵니다하지 않을 경우

  • 을 처리하기 위해 다음 항목이있는 경우 기본적으로해야 할 일은 다음과 같습니다.

    Connection<Post> messages = publicFbClient.fetchConnection("search", 
         Post.class, 
         Parameter.with("q", "Watermelon"), 
         Parameter.with("since", fromDate), 
         Parameter.with("until", toDate), 
         Parameter.with("type", "post")); 
    
    for (List<Post> feedConnectionPage : messages) { 
         for (Post post : myFeedConnectionPage) { 
           // do stuff with post 
         } 
    } 
    

    반환 할 수있는 어떤 종류의 메소드를 원한다면 당신은 수천 개의 결과를 반환 할 수 있고 그것들을 통한 크롤링은 몇 초 (수분에서 수분 또는 수 시간이 걸릴 수도 있습니다) 결과 객체 배열이 실제로 커질 수 있기 때문에 매우 신중할 것입니다. 더 나은 아이디어는 비동기 호출을 사용하고 메소드의 결과를 주기적으로 체크 아웃하는 것입니다.

    "이후"매개 변수가 무시 된 것처럼 보이지만. 게시물은 최신에서 오래된 것으로 가져오고 페이징을 할 때이 매개 변수를 어떻게 든 남겨 두었다고 생각합니다.

    희망 나는 당신을 위해 더 분명하게 :)

  • 0

    우리는 포스트 Iterator 객체가 있습니다. 그래서 우리는 이런 식으로 작업을 수행 할 수 있습니다

    Connection<Post> messages = publicFbClient.fetchConnection(...) ; 
    someMethodUsingPage(messages); 
        while (messages.hasNext()) { 
         messages = facebookClient.fetchConnectionPage(messages.getNextPageUrl(), Post.class); 
         someMethodUsingPage(messages); 
        } 
    

    다음 각 메시지에서 우리는 향후 25 메시지를해야합니다.

    관련 문제