我想从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”权限。
答案 0 :(得分:1)
有 NO 方式,您可以通过Graph API获取朋友的朋友。这是永远不可能的,并且受Graph API v2.0的额外限制,您甚至只有使用该应用程序的用户的朋友。
此外,friends_*
权限自近一年以来已被弃用。