6

我有一个 facebook 桌面应用程序,其中一些测试用户都授予了 stream_read 和离线访问权限。我可以轻松地将帖子检索到每个用户的信息流和个人资料中。我不能轻易做的是检索用户在他们朋友的墙上发布的帖子。

事实上,这曾经用于一个相当复杂的多查询,但现在已经停止工作,或者只是间歇性地工作......

是否有人愿意分享他们的方法(如果存在)或讨论这种复杂查询可能存在哪些限制?

4

3 回答 3

2

我试了一下,遇到了我相信的同样的问题,但也许我可以帮助解释一下。

这可能是值得在 Facebook wiki 讨论页上发布的东西,看看 Facebook 的某个人是否可以对此有所了解,除非我在这里遗漏了一些东西。

我放置USER_ID的任何地方都需要填写您要搜索的用户,并且F_ID1F_ID2是朋友...

FQL #1:应该有效(理论上)

  • 首先获取所有朋友的列表
  • 然后在下一个查询的 IN 子句中使用该列表
  • 过滤掉由 USER_ID 发布的帖子
  • 确保消息不为 NULL

FQL #1:没有帖子被退回

{
"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 "

}

FQL #2:帖子被退回

然而奇怪的是,如果您仅限于一个朋友 (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 "

}

FQL #3:没有帖子被退回

然而,尝试将另一个朋友添加到 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 "

}
于 2010-03-21T02:20:34.527 回答
0

至少我发现我可以使用 php:

$facebook->api("/<friend_uid>/feed") 

准确地取回用户墙上显示的内容。您可以分页查询。不幸的是,您无法过滤您的查询,除非通过上面显示的方式定位朋友墙。然而,API 非常慢,并且比 Multiquery 产生更多的 API 调用。很遗憾,但如果您遇到使用 FQL(单个 FQL 或多查询)时没有看到所有期望看到的帖子的情况,这似乎是唯一的选择。

在 Facebook 上记录的错误:如果您有此问题,请提交您对此错误的反馈! http://bugs.developers.facebook.net/show_bug.cgi?id=11247

于 2010-12-07T04:57:26.857 回答
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 子句是否有助于返回最近的查询 - 有人愿意确认吗?

于 2010-03-23T18:14:39.163 回答