![](/img/trans.png)
[英]How to limit Facebook Graph API to only posts (not comments or likes) by user without using FQL?
[英]Getting user likes of stream items via FQL (posts, comments, pictures, links, etc)
我需要帮助通过FQL获取用户喜欢的流项目 。 我有一些喜欢回来,但无法弄清楚如何获得其他人。 对于access_token, 授予每个权限 。
让我告诉你我能做什么:
在网页 Feed中我喜欢的帖子:
fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT target_id FROM connection WHERE source_id=me() and is_following=1) AND likes.user_likes=1 LIMIT 10
注意: 这个工作截至2011年12月中旬时原始问题已发布。 现在(2012年2月中旬),它不再返回页面中任何喜欢的流内容。
帖子我喜欢我发布的帖子 :
fql?q=Select post_id, source_id, message FROM stream where source_id=me() AND likes.user_likes=1 LIMIT 10
这就是我所缺少的
我喜欢在朋友的墙上发帖:
fql?q=Select post_id, source_id, message FROM stream where source_id in (SELECT uid1 FROM friend WHERE uid2=me()) AND likes.user_likes=1 & LIMIT 5000
我喜欢在活动的墙上发帖:
????
在团体的墙上我喜欢的帖子:
????
以下是我发布的内容(截至发稿时间为10-22-2012):
对于朋友/订阅/页面项目:
SELECT likes, post_id, actor_id, target_id, message
FROM stream
WHERE source_id IN (SELECT target_id FROM connection WHERE source_id=me())
AND likes.user_likes=1
要么
从'喜欢'表:
SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()
但是post_id
总是为null,并且有时在通过图形api查询时不存在object_id
(即graph.facebook.com/OBJECT_ID
)
对于链接/外部对象 - 没有直接的方法来获取Facebook帖子的详细信息,但它返回了很多结果。 也许使用另一个查询/多查询在流或链接表中查找这些URL。
SELECT url
FROM url_like
WHERE user_id=me()
我找到了使用Open Graph API的解决方案。 希望这对你也有帮助吗?
要执行此操作,您需要用户read_stream权限。
如果我的解决方案符合您的要求,请告诉我。
因为FQL不会比V2.0更长,所以我更喜欢使用Open Graph API而不是FQL。
/*
*
* Count my_user_id likes in wall of user "123"
*
* ex: url = /123/posts
*
* setTimeout to avoid exceed api level rate limit, code 613
*/
function findMyLikes(url,my_user_id,count,callback) {
console.log(url);
FB.api(url, function (response) {
if (response.data) {
response.data.forEach(function (post) {
//console.log(post);
if (post.likes) {
post.likes.data.forEach(function (like) {
if (like.id == my_user_id) {
count++;
}
});
}
});
}
if (response.paging && response.paging.next) {
setTimeout(function() {findMyLikes(response.paging.next,my_user_id,count,callback)},1000);
} else {
callback(count);
}
});
};
我注意到这个解决方案可能需要一些时间,如果你正在分析非常长的提要。 对于这个问题,我还有一个悬而未决的问题:通过较少的图形API调用获取新闻墙上特定用户的所有喜欢https://codereview.stackexchange.com/q/58270/50013?sem=2
Facebook的合作伙伴工程师@Jeff Sherlock在这里说'你不能使用fb平台吸引所有人的喜欢。 出于隐私原因,我们将其限制为演员,电影,运动队等。 我知道它没有多大意义,因为您可以使用Facebook API查询各种其他内容。 我建议你拍照阿什顿库彻并尝试查询他喜欢的桌子......等等,你需要他的许可; ]
问题是,like表为所有内容返回一个空白的post_id。 但是,它会为您的喜欢返回object_id。
您可以将所有这些object_id放在逗号分隔的字符串中,然后使用?ids = objectid1,objectid2,objectid3等提交图形API调用。
然后,它将返回它找到的所有对象。 通过这种方式,您可以获得流项目的喜欢。
它似乎回到了大约4周。 我似乎无法让它比这更进一步。
顺便说一句,你会发现一件事是喜欢的评论也作为object_ids返回到同一个表中。 但是,似乎没有任何方法可以找出这些object_ids的对象详细信息。 这些有点神秘。
如果您阅读了类似的表文档,则post_id
字段的注释如下:
必须从流FQL表中查询这些帖子ID。
因此,当你比较post_id
类的post_id<>""
,它不会返回任何内容,因为默认结果包含空白的post_id。 当你运行以下查询时似乎:
SELECT user_id, object_id, post_id
FROM like
WHERE user_id=me()
它返回用户喜欢的页面和其他一些东西但不包括Feed帖子。
由于您已经希望从流表获得喜欢,您只想从流表中获取post_id
。 要获取给定日期的NewsFeed的post_id
,您可能需要尝试以下查询。
SELECT post_id
FROM stream
WHERE filter_key IN (
SELECT filter_key
FROM stream_filter
WHERE uid=me()
AND type='newsfeed'
)
AND is_hidden = 0
AND description<>''
您可能希望使用Limit
和Created_time
字段来获得更多。 的帖子。 一旦你在Multi-query中使用上面的查询来获得用户的喜欢,你肯定会在某一天得到喜欢。
SELECT post_id, actor_id, message, type, permalink, attachment, likes,
comments, description, updated_time, created_time
FROM stream
WHERE filter_key in (
SELECT filter_key
FROM stream_filter
WHERE uid=me() AND type='newsfeed'
)
只需根据您的要求更改类型
GraphAPI
无法做到这GraphAPI
。 GraphAPI
将允许您查看用户喜欢/me/likes
,但它不会为您提供他们喜欢的发布到用户墙上的所有项目的列表。
您可以在Facebook文档中查看相关详细信息。
我没有您在问题中列出的FQL
经验,但Stack Overflow问题似乎为您的问题提供了答案。
请参阅: Facebook API - “我所有的喜欢”查询
完美地完成了测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.