即使许可是正确的,也不能拉朋友的照片

时间:2012-12-08 04:54:41

标签: facebook-fql

我正在尝试将特定朋友标记的照片拉出来。所以我创建了一个具有user_photosfriends_photos权限的访问令牌。

  1. 我可以运行查询来获取我标记的照片:

    SELECT object_id FROM photo_tag WHERE subject=me()

  2. 我可以使用me()或user_id来引用自己:

    SELECT object_id FROM photo_tag WHERE subject=1102318

  3. 但是当我要求照片的朋友被贴上标签时,我得到空集:

    SELECT object_id FROM photo_tag WHERE subject=1102054
    

    - > []

    奇怪的是,我可以使用以下(大量)查询来所有 photo_tags 所有朋友:

    SELECT object_id FROM photo_tag WHERE subject IN
        (SELECT uid2 FROM friend WHERE uid1=me()) 
    

    - >工作(!),返回前1400左右。所以它似乎不是权限问题。

    我还可以获得从上表中选择的单个用户的照片

    SELECT object_id FROM photo_tag WHERE subject IN
        (SELECT uid2 FROM friend WHERE uid1=me() LIMIT 1)
    

    - >也有效

    但索引表失败

    SELECT object_id FROM photo_tag WHERE subject IN
        (SELECT uid2 FROM friend WHERE uid1=me() LIMIT 1 OFFSET 3)
    

    - > []

    我想知道其他人之前是否曾见过这种行为。我提交了bug report,如果我听到任何消息,我会报告。

1 个答案:

答案 0 :(得分:2)

facebook没有公开告诉您,用户可以决定向其他Facebook用户使用的应用提供哪种数据(请查看“其他人使用的应用”部分here)。因此,如果您的示例中的用户1102054决定禁止其他人使用的应用访问他的照片,那么请查询

SELECT object_id FROM photo_tag WHERE subject=1102054

会失败。

但是,如果您的示例中的用户1102054和允许应用访问照片的其他人在特定图片中被标记,那么您仍然可以通过查询访问该图片:

SELECT pid FROM photo_tag WHERE subject=1102054
             AND pid in (SELECT pid FROM photo_tag WHERE subject=<other user id here>)

但是要小心。如此切换上述两个用户ID仍将返回空数据集:

SELECT pid FROM photo_tag WHERE subject=<other user id here>
             AND pid in (SELECT pid FROM photo_tag WHERE subject=1102054)