Получение членов группы 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();
}
}
Какие-нибудь мысли?