1

我正在尝试提取标记了特定朋友的照片。因此,我创建了一个具有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

但是当我要求一张朋友被标记的照片时,我得到了空集:

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()) 

-->works(!),返回前 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)

--> []

我想知道是否有其他人以前见过这样的行为。我提交了一个错误报告,如果我有任何消息,我会报告回来。

4

1 回答 1

2

facebook 没有公开告诉你的是,用户可以决定向其他 facebook 用户使用的应用程序提供哪些类型的数据(在此处查看“其他人使用的应用程序”部分)。因此,如果您示例中的用户 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)
于 2013-01-11T08:47:16.680 回答