如何在Graph API中将用户的新闻Feed过滤到特定应用的帖子/操作

时间:2013-07-27 10:52:03

标签: facebook facebook-graph-api facebook-fql

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

我发现了这个:How to get activity from my app with 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个)帖子的列表?

1 个答案:

答案 0 :(得分:2)

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

因此,对于stream table,您可以选择source_id(帖子所在的用户的ID)或filter_key。您可以从stream_filter表中读取有效的过滤器密钥 - 但每个用户都有过滤密钥nf,用于显示新闻Feed中的内容。 (post_id也是可索引的,但对我们来说没用。)

因此,您可以尝试使用WHERE filter_key = 'nf' AND app_id = 'YOUR_APP_ID'进行过滤 - 这应该会为您提供活动用户可以通过您的应用在其Feed中看到的帖子。

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

me()

- 但我认为这会有不太好的表现,所以我先尝试使用过滤键,看看是否能找到你想要的帖子。


编辑:因此,正如提问者发现的那样,使用… WHERE (source_id = me() OR source_id IN (SELECT uid1 FROM friend WHERE uid2 = me())) AND app_id = 'YOUR_APP_ID'显然效果更好,也更容易。其他人可能需要这个,他们应该使用这个版本,因为它更可靠 - FQL通常会产生比预期更少的结果。