无法在Facebook上获得朋友之友

时间:2015-02-20 12:41:03

标签: android facebook facebook-graph-api

我想从facebook上获取朋友的朋友但却无法实现同样的目标。 我跟着this链接(一个有3个upvotes)。我可以得到我的朋友列表。但每当我尝试访问朋友的朋友时,facebook会返回一个奇怪的结果。假设A是B和B的朋友是C的朋友 我已经在A,B和C的所有设备上安装了我的应用程序。当我以用户A运行我的应用程序时,我得到包含B s details.Then I again hit another url using B s用户ID的json响应,这次我必须获取C.But facebook的详细信息正在返回A的详细信息。

以下是相关代码:

以下asynctask用于检索用户的朋友:

我在这里点击了网址: https://graph.facebook.com/me/friends?access_token=USERS_ACCESS_TOKEN

public class GetFriendList extends AsyncTask<String,String,String>
        {   private ProgressDialog progressDialog;


        protected void onPreExecute() {
            super.onPreExecute();
            if (progressDialog == null) {
                progressDialog = createProgressDialog(MainActivity.this);
                progressDialog.show();
            } else {
                progressDialog.show();
            }


        }       

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            // contactList = new ArrayList<HashMap<String, String>>();



            //String urlforget="https://graph.facebook.com/"+mediaid+"/friends?access_token="+access_token;

            String urlforget="https://graph.facebook.com/me/friends?access_token="+access_token;
            System.out.println(urlforget);

            ServiceHandle sh = new ServiceHandle();

            String jsonStr = sh.makeServiceCall(urlforget, ServiceHandle.GET);
            // after getting  JSON string from the URL
            System.out.println(""+jsonStr);
            //Toast.makeText(getBaseContext(), "result:"+jsonStr, Toast.LENGTH_SHORT).show();

            try {

                if (jsonStr != null) 
                {
                    JSONObject jsonobj = new JSONObject(jsonStr);
                    // Getting JSON Array node




                    myfriendlist = jsonobj.getJSONArray("data");


                    // looping through All Contacts
                    for (int i = 0; i <myfriendlist.length(); i++) {
                        JSONObject c = myfriendlist.getJSONObject(i);

                        friendmediaid=c.getString("id");
                    }


                }


            } catch (Exception e) 
            {
                e.printStackTrace();
            }




            return null;
        }//doInbacckground


        protected void onPostExecute(String file_url) { 

            progressDialog.dismiss();

            new GetFriendofFriendList(friendmediaid).execute();



        }//postexecute

        }//Asynctask

接下来从我之前的asynctask获取的id中检索朋友,我点击了网址:“https://graph.facebook.com/”+ fmediaid +“/ friends?access_token =”+ access_token;

的AsyncTask:

 public class GetFriendofFriendList extends AsyncTask<String,String,String>
        {   private ProgressDialog progressDialog;
            String fmediaid,nurl;

        public GetFriendofFriendList(String mediaid,String nurl) {
            // TODO Auto-generated constructor stub
            this.fmediaid=mediaid;
            this.nurl=nurl;
        }


        protected void onPreExecute() {
            super.onPreExecute();
            if (progressDialog == null) {
                progressDialog = createProgressDialog(MainActivity.this);
                progressDialog.show();
            } else {
                progressDialog.show();
            }


        }       

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub

            // contactList = new ArrayList<HashMap<String, String>>();



            System.out.println("2nd async==>"+fmediaid);

            String urlforget="https://graph.facebook.com/"+fmediaid+"/friends?access_token="+access_token;

            //String urlforget="https://graph.facebook.com/me/friends?access_token="+access_token;
            System.out.println(urlforget);

            ServiceHandle sh = new ServiceHandle();

            String jsonStr = sh.makeServiceCall(urlforget, ServiceHandle.GET);
            // after getting  JSON string from the URL
            System.out.println("Friend of friend===>"+jsonStr);
            //Toast.makeText(getBaseContext(), "result:"+jsonStr, Toast.LENGTH_SHORT).show();



            return null;
        }//doInbacckground


        protected void onPostExecute(String file_url) { 

            progressDialog.dismiss();



        }//postexecute

        }//Asynctask

但是上面的asynctask正在返回我正在使用该应用程序的配置文件。(如上所述)。

这就是我生成访问令牌的方式:

 @Override
             public void call(Session session, SessionState state, Exception exception) {
                 if (session.isOpened()) {
                     Toast.makeText(MainActivity.this, session.getAccessToken(), Toast.LENGTH_LONG).show();
                     System.out.println(session.getAccessToken());
                     access_token=session.getAccessToken();

那么我做错了什么?为什么C没有出现?我已经取得了所有权限,并且所有3个帐户都接受了“user_friends”权限。

1 个答案:

答案 0 :(得分:1)

NO 方式,您可以通过Graph API获取朋友的朋友。这是永远不可能的,并且受Graph API v2.0的额外限制,您甚至只有使用该应用程序的用户的朋友。

此外,friends_*权限自近一年以来已被弃用。