Java 获得Facebook群组成员-有限的结果

Java 获得Facebook群组成员-有限的结果,java,facebook,limit,membership,Java,Facebook,Limit,Membership,我正试图获得一个开放的Facebook群组的成员,但我不知道为什么我得到的结果有限 我的示例已经完成,该组包含超过24k个成员: 我尝试使用两种方法:v2.5API和1.0。1.0检索我在单个调用中得到的全部结果(~4k个成员)。在2.5中,我接收25个用户的项目集 在这两种情况下,最终结果仅限于4075名成员 我附上我的代码和输出(请参阅:) 包com.alejandrorg.fbvaccine.core import java.io.BufferedWriter; import java.i

我正试图获得一个开放的Facebook群组的成员,但我不知道为什么我得到的结果有限

我的示例已经完成,该组包含超过24k个成员:

我尝试使用两种方法:v2.5API和1.0。1.0检索我在单个调用中得到的全部结果(~4k个成员)。在2.5中,我接收25个用户的项目集

在这两种情况下,最终结果仅限于4075名成员

我附上我的代码和输出(请参阅:)

包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();

    }

}
导入java.io.BufferedWriter;
导入java.io.FileWriter;
导入java.io.InputStream;
导入java.net.URL;
导入java.util.Iterator;
导入java.util.LinkedList;
导入com.fasterxml.jackson.databind.JsonNode;
导入com.fasterxml.jackson.databind.ObjectMapper;
公共类TestGetGroupMembers{
私有最终字符串URL_BASE_GRAPH_METHOD1=”https://graph.facebook.com/v2.5/";
私有最终字符串URL_BASE_GRAPH_METHOD2=”https://graph.facebook.com/";
专用最终字符串组_ID=“188295541208911”;
专用最终字符串标记=“xxx”;
私有整数totalNumberPages=0;
公共TestGetGroupMembers(){
试一试{
执行();
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
private void execute()引发异常{
字符串outFileMethod1=“outMethod1.txt”;
字符串outFileMethod2=“outMethod2.txt”;
LinkedList results1=getGroupMembers(URL\u BASE\u GRAPH\u METHOD1,组\u ID);
System.out.println(“保存方法1的结果”);
保存(结果1,输出方法1);
System.out.println(“处理的页数:“+this.totalNumberPages”);
此.totalNumberPages=0;
LinkedList results2=getGroupMembers(URL\基本\图形\方法2,组\ ID);
System.out.println(“保存方法2的结果”);
保存(结果2,输出方法2);
System.out.println(“处理的页数:“+this.totalNumberPages”);
}
/*
*方法1使用API的v2.5版本,该版本使用每页25个用户加载用户。
*/
私有LinkedList getGroupMembers(字符串urlBase,字符串groupID)引发异常{
LinkedList ret=新建LinkedList();
字符串urlStr=urlBase+groupID
+Constants.SEPARATOR+“members?access_token=“+token;
URL=新URL(urlStr);
getMembers(urlStr,url.openStream(),ret);
返回ret;
}
私有void getMembers(字符串url、InputStream is、LinkedList ret)引发异常{
totalNumberPages++;
System.out.println(“处理url:+url”);
ObjectMapper om=新的ObjectMapper();
JsonNode root=om.readValue(is,JsonNode.class);
迭代器itRoot=root.get(“数据”).Iterator();
while(itRoot.hasNext()){
JsonNode=itRoot.next();
如果(节点!=null){
JsonNode id=node.get(“id”);
JsonNode name=node.get(“name”);
ret.add(name.asText()+”(“+id.asText()+”));
}
}
JsonNode paging=root.get(“分页”);
if(分页!=null){
JsonNode nextPage=paging.get(“下一步”);
如果(下一页!=null){
字符串urlNext=nextPage.asText();
is.close();
URL urlNxt=新URL(urlNext);
getMembers(urlNext、urlNxt.openStream()、ret);
}
}
}
私有void save(LinkedList lst,字符串f)引发异常{
BufferedWriter bW=新的BufferedWriter(新的文件写入程序(f));
对于(inti=0;i

有什么想法吗?

顺便说一句,我发现有5000个结果()的限制,但无论如何,我用任何方法都不会得到超过4705个结果。可能有些用户由于隐私原因(例如禁用平台)而没有返回。顺便说一句,我发现有5000个结果()的限制,但无论如何,我用任何方法都不会得到超过4705个。有可能是因为隐私原因(例如,禁用平台),其中一些用户没有返回。