Получение членов группы Facebook - ограниченные результаты

Я пытаюсь получить членов ОТКРЫТОЙ группы Facebook, но я не знаю, почему я получаю ограниченные результаты.

Мой пример был сделан с этой группой, которая содержит более 24 тысяч участников: https://facebook.com/groups/188295541208911

Я пытался использовать два метода: v2.5 API и 1.0. 1.0 извлекает весь результат, который я получаю за один звонок (~4k участников). В 2.5 я получаю предметы в наборах по 25 пользователей.

В обоих случаях конечный результат ограничен 4075 участниками.

Я прилагаю свой код и вывод (см.: http://pastebin.com/whwK5NYn).

пакет com.alejandrorg.fbvaccine.core;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStream;
import java.net.URL;
import java.util.Iterator;
import java.util.LinkedList;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class TestGetGroupMembers {

    private final String URL_BASE_GRAPH_METHOD1 = "https://graph.facebook.com/v2.5/";
    private final String URL_BASE_GRAPH_METHOD2 = "https://graph.facebook.com/";
    private final String GROUP_ID = "188295541208911";
    private final String TOKEN = "xxx";
    private int totalNumberPages = 0;
    public TestGetGroupMembers() {
        try {
            execute();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    private void execute() throws Exception {
        String outFileMethod1 = "outMethod1.txt";
        String outFileMethod2 = "outMethod2.txt";
        LinkedList<String> results1 = getGroupMembers(URL_BASE_GRAPH_METHOD1, GROUP_ID);
        System.out.println("Saving results of method 1..");
        save(results1, outFileMethod1);
        System.out.println("Number of pages processed: " + this.totalNumberPages);
        this.totalNumberPages = 0;
        LinkedList<String> results2 = getGroupMembers(URL_BASE_GRAPH_METHOD2, GROUP_ID);
        System.out.println("Saving results of method 2..");
        save(results2, outFileMethod2);
        System.out.println("Number of pages processed: " + this.totalNumberPages);
    }

    /*
     * The method 1 uses v2.5 version of the API which loads users using 25 users per page.
     */
    private LinkedList<String> getGroupMembers(String urlBase,  String groupID) throws Exception {
        LinkedList<String> ret = new LinkedList<String>();
        String urlStr = urlBase + groupID
                + Constants.SEPARATOR + "members?access_token=" + TOKEN;
        URL url = new URL(urlStr);
        getMembers(urlStr, url.openStream(), ret);
        return ret;
    }

    private void getMembers(String url, InputStream is, LinkedList<String> ret) throws Exception {
        totalNumberPages++;
        System.out.println("Processing url: " + url);
        ObjectMapper om = new ObjectMapper();
        JsonNode root = om.readValue(is, JsonNode.class);
        Iterator<JsonNode> itRoot = root.get("data").iterator();
        while (itRoot.hasNext()) {
            JsonNode node = itRoot.next();
            if (node != null) {
                JsonNode id = node.get("id");
                JsonNode name = node.get("name");
                ret.add(name.asText() + " (" + id.asText() + ")");
            }
        }
        JsonNode paging = root.get("paging");
        if (paging != null) {
            JsonNode nextPage = paging.get("next");
            if (nextPage != null) {
                String urlNext = nextPage.asText();
                is.close();
                URL urlNxt = new URL(urlNext);
                getMembers(urlNext, urlNxt.openStream(), ret);
            }
        }
    }
    private void save(LinkedList<String> lst, String f) throws Exception {
        BufferedWriter bW = new BufferedWriter(new FileWriter(f));
        for (int i = 0; i < lst.size(); i++) {
            String n = lst.get(i);
            bW.write(n);
            bW.newLine();
        }
        bW.close();
        System.out.println("File " + f + " written. " + lst.size() + " lines");
    }
    public static void main(String[] args) {
        new TestGetGroupMembers();

    }

}

Какие-нибудь мысли?

0 ответов

Другие вопросы по тегам