无法从相册中获取 Facebook 照片的预期响应



我是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

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

最新更新