我有一个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个)帖子的列表?
答案 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通常会产生比预期更少的结果。