我有一个Facebook桌面应用程序,其中一些测试用户都已授予stream_read&离线访问权限。 我可以轻松地检索每个用户的流和帖子的帖子轮廓。 我不能轻易做到的是检索用户对他们朋友的一面墙所做的帖子。
事实上,这曾经使用过相当复杂的多重查询,但现在已停止工作,或只是间歇性地工作......
是否有人愿意分享他们的方法,如果存在或讨论可能对这种类型的复杂查询有什么限制?
答案 0 :(得分:2)
我试了一下,遇到了我相信的同样的问题,但也许我可以帮助解释一下。
这可能值得在Facebook维基谈话页上发布,看看Facebook的某个人是否可以对此有所了解,除非我在这里遗漏了一些东西。
USER_ID 的任何地方都需要填写您要搜索的用户, F_ID1 , F_ID2 是朋友。
{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",
"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (SELECT uid2 FROM #friends) AND message != '' AND actor_id = USER_ID "
}
但奇怪的是,如果你只限于一个朋友(F_ID1),你将收回发给他们朋友墙的帖子USER_ID!
{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",
"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (SELECT uid2 FROM #friends WHERE uid2 = F_ID1) AND message != '' AND actor_id = USER_ID "
}
然而,尝试将另一位朋友添加到IN F_ID1& F_ID2 ... 再没有结果 ...
{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",
"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (F_ID1,F_ID2) AND message != '' AND actor_id = USER_ID "
}
答案 1 :(得分:0)
更正:经过进一步测试,我发现这个解决方案不能100%工作。 它将返回一些但不是你在其他墙上发布的所有帖子 - 我不知道限制因素是什么 - 所以我认为这是一个悬而未决的问题。
部分解决方案: 因此,这是FQL多重查询,它可以生成用户在朋友的墙上发布的墙贴:
{"query1":"SELECT post_id FROM stream WHERE source_id IN (SELECT target_id FROM connection WHERE source_id = USER_ID)",
"query2":"SELECT actor_id, post_id, target_id, message FROM stream WHERE (actor_id = USER_ID) AND (post_id IN (SELECT post_id FROM #query1))"}
第一个查询对属于用户的所有“目标”进行嵌套选择(朋友和应用程序?)&将这些用作流查询的source_id值 第二个查询使用从第一个查询返回的post_id来再次查询流,并将actor_id属性设置为用户的id。
我不知道ORDER或LIMIT条款是否有助于返回更近期的查询 - 有人关心确认吗?
答案 2 :(得分:0)
至少我发现我可以使用php:
$facebook->api("/<friend_uid>/feed")
准确回复用户墙上显示的内容。您可以分页查询。很遗憾,您无法过滤您的查询,但上面显示的定位朋友留言墙除外。然而,API速度很慢,并且比Multiquery产生了更多的API调用。很遗憾,但如果您遇到使用FQL(单个FQL或多个查询)时未能看到所有帖子的情况,这似乎是唯一的选择。
在Facebook上登录的错误:如果您有这个问题,请将您的反馈提交回来! http://bugs.developers.facebook.net/show_bug.cgi?id=11247