0

我有一个 Facebook 应用程序,我想过滤用户的新闻提要,以获取使用我的应用程序在 Graph API 中发布的最新帖子/操作。

我发现了这个:如何使用 Facebook Graph API 从我的应用中获取活动? 这对于获取特定朋友(或用户本身)的操作/帖子是可以的,我需要的几乎相同,不同之处在于我需要用户的所有使用我的应用程序的朋友的“流”,而不是单个用户。

然后我发现了这个:Facebook graph api: how to filter app feeds。对于这个,问题中的示例本身为我返回空数据(具有适当的访问令牌和read_stream权限)。唯一的答案建议使用 FQL。我试过SELECT post_id, message, comments, likes FROM stream WHERE app_id = MY_APP_ID了,我得到了这个错误:

{
  "error": {
    "message": "Your statement is not indexable. The WHERE clause must contain an 
        indexable column. Such columns are marked with * in the tables linked from
        http://developers.facebook.com/docs/reference/fql ", 
    "type": "NoIndexFunctionException", 
    "code": 604
  }
}

如何从用户的范围内检索用户及其朋友从特定应用程序中发布的所有最后(例如 100 条)帖子的列表?

4

1 回答 1

2

对于所有 FQL 查询,您的 WHERE 子句必须包含至少一个可索引字段(这些字段在文档中的字段名称旁边标有星号)——出于性能原因。

因此,对于流表,您可以在source_id(帖子所在墙的用户的 ID)或filter_key. 您可以从表中读取有效的过滤器键stream_filter- 但每个用户都有过滤器键nf用于显示在他们的新闻提要中的内容。(post_id 也是可索引的,但在这里对我们没有用。)

因此,您可以尝试过滤WHERE filter_key = 'nf' AND app_id = 'YOUR_APP_ID'- 这应该会为您提供活跃用户能够在他们的提要中看到的帖子,这些帖子是通过您的应用制作的。

您也可以尝试使用 source_id,将其过滤为等于me()(您在 FQL 中的当前用户),或者它在您的朋友列表中(您可以从friend表中获取其 id,再次使用me(), 作为子查询) - 像这样,

… WHERE (source_id = me() OR source_id IN (SELECT uid1 FROM friend WHERE uid2 = me())) AND app_id = 'YOUR_APP_ID'

– 但我认为这样的性能会不太好,所以我会先尝试使用过滤器键,看看是否能得到你想要的帖子。


编辑:所以,正如提问者发现的那样,使用/me/home?filter=app_MY_APP_ID显然更好,也更容易。无论其他人可能需要这个,他们都应该使用这个版本,因为它更可靠——FQL 通常给出的结果比人们预期的要少。

于 2013-07-27T11:15:06.970 回答