我是Facebook API的新手。首次使用此链接从图形 API 尝试 FQL 查询。
我正在尝试使用相册ID从相册中获取照片。当我请求使用带有 URL 的 Facebook 对象https://graph.facebook.com/10150146071791729/photos&access_token=ACCESS_TOKEN
时,我收到以下响应(在解析为 JSON 对象之前)。 {"id":"https://graph.facebook.com/10150146071791729/photos","shares":2}
.我通过解析后打印 JSON 对象的长度来确认它,即 2。当我在 Web 浏览器中复制并粘贴相同的 URL 时,我得到了预期的响应(我得到的 FQL 查询中的响应)。这是我的代码。
public void onComplete(Bundle values) {
String token = facebook.getAccessToken();
System.out.println("Token: " + token);
try {
String response = facebook.request("https://graph.facebook.com/10150146071791729/photos&access_token=ACCESS_TOKEN");
System.out.println("response :"+response);
JSONObject obj = Util.parseJson(response);
System.out.println("obj length : " + obj.length());
Iterator iterator = obj.keys();
while(iterator.hasNext()){
String s = (String)iterator.next();
System.out.println(""+s+" : "+obj.getString(s));
}
} catch (Throwable e) {
e.printStackTrace();
}
}
注意:我从 URL 中使用的 FQL 查询中获取了访问令牌。我没有编写任何会话(登录/注销)逻辑,因为它是一个测试项目。
您的请求是错误的。它应该是
"https://graph.facebook.com/10150146071791729/photos?access_token=ACCESS_TOKEN"
将照片后面的"&"替换为"?"。
还有两件事,你正在进行图形 API 查询,而不是 FQL 查询。
其次,切勿公开发布访问令牌。如果我愿意,我现在可以使用您的访问令牌来编辑您的 Facebook 信息。
编辑:当您使用Android Facebook SDK时,您不需要使用完整的图形路径。相反,请使用
facebook.request("10150146071791729/photos")
您无需添加访问令牌,因为 Facebook 对象已具有该令牌。希望这有帮助。
因为除了最相关的代码之外,没有提供太多代码,让我给你几种访问相册中照片的方法
第一种方法(如果您希望使用完整的URL发出请求)
String URL = "https://graph.facebook.com/" + YOUR_ALBUM_ID
+ "/photos&access_token="
+ Utility.mFacebook.getAccessToken() + "?limit=10";
try {
HttpClient hc = new DefaultHttpClient();
HttpGet get = new HttpGet(URL);
HttpResponse rp = hc.execute(get);
if (rp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String queryPhotos = EntityUtils.toString(rp.getEntity());
Log.e("PHOTOS RESULT", queryPhotos);
}
} catch (Exception e) {
e.printStackTrace();
}
第二种方法(不使用前面提到的Shenoy@Vinay的完整URL)
try {
Bundle paramUserInfo = new Bundle();
paramUserInfo.putString(Facebook.TOKEN, Utility.mFacebook.getAccessToken());
String resultPhotos = Utility.mFacebook.request("YOUR_ALBUM_ID/photos", paramUserInfo, "GET");
Log.e("PHOTOS", resultPhotos);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
就个人而言,我几乎完全通过我的应用程序遵循第一种方法。它让我可以使用分页进行无休止的ListViews
话虽如此,当我在某个地方需要一些快速数据时,我确实依赖于第二种方法。它们都有效,我希望它们中的任何一个(或两个)对您有所帮助。