0

我是 Facebook API 的新手。首次使用此链接从 Graph 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 查询中获得了访问令牌。而且我没有编写任何会话(登录/注销)逻辑,因为它是一个测试项目。

4

2 回答 2

0

你的要求是错误的。它应该是

"https://graph.facebook.com/10150146071791729/photos?access_token=ACCESS_TOKEN"

将照片后面的“&”替换为“?”。

还有两件事,您正在进行 Graph API 查询,而不是 FQL 查询。

其次,切勿公开发布您的访问令牌。如果我愿意,我现在可以使用您的访问令牌来编辑您的 Facebook 信息。

编辑:当您使用 Android Facebook SDK 时,您不需要使用完整的图形路径。相反,使用

facebook.request("10150146071791729/photos")

您不需要添加访问令牌,因为 Facebook 对象已经拥有它。希望这可以帮助。

于 2012-09-22T12:15:07.057 回答
0

因为除了最相关的代码之外没有提供太多代码,让我给你几种方法可以访问相册中的照片

第一种方法(如果您希望使用完整的 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();
}

第二种方法(不使用前面提到的@Vinay Shenoy 的完整 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

话虽这么说,当我在某处需要一些快速数据时,我确实依赖第二种方法。它们都有效,我希望它们中的任何一个(或两者)都对您有所帮助。

于 2012-09-22T14:23:55.460 回答