我正在尝试将特定朋友标记的照片拉出来。所以我创建了一个具有user_photos
和friends_photos
权限的访问令牌。
我可以运行查询来获取我标记的照片:
SELECT object_id FROM photo_tag WHERE subject=me()
我可以使用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())
- >工作(!),返回前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,如果我听到任何消息,我会报告。
答案 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)