更改日期范围并循环运行

时间:2013-12-27 08:57:37

标签: python

我管理某个facebook page。我正在尝试获得1000多个喜欢的帖子。

我不需要检索在app中使用它的数据。我想手动从我们从Graph API资源管理器获得的输出中复制1000多个喜欢帖子的粘贴链接。我对此有点新鲜。

我已经尝试在API文档中搜索此类查询,这些查询按照类似过滤,但是徒劳无功。我能找到的是如何使用此检索所有帖子

https://graph.facebook.com/ilovetrolls/posts?access_token=

是否有任何此类查询可让我们根据喜欢进行过滤?

3 个答案:

答案 0 :(得分:3)

你可以使用fql,你想要一个像这样的查询:

SELECT post_id, comments, like_info.like_count, message 
FROM stream
WHERE source_id = 263738183707778 and like_info.like_count > 1000 and created_time > 1325376000

将1325376000替换为您想要的开始时间(此处以unix时间戳格式给出,供参考,请参阅http://en.wikipedia.org/wiki/Unix_time,目前设置为2012年1月1日00:00:00

您需要使用的网址是:

https://graph.facebook.com/fql?q=SELECT post_id, comments, like_info.like_count, message FROM stream WHERE source_id = 263738183707778 and like_info.like_count > 1000 and created_time > 1325376000&access_token=

使用诸如limit = 50之类的soemthing将有助于获取更多帖子。帖子的数量受限于我读到的fql api中的错误。见Facebook FQL stream limit? Facebook FQL `like` table retuns max 100 rows?

建议做的是使用图形api instaed。不幸的是,图表api没有直接的方法来根据喜欢的数量进行过滤。

可能做的一件事是更改日期范围并在循环示例中运行,您可以在其中迭代日期范围,设置created_time的上限和下限,并在循环中运行它或执行批处理查询

如果你想更可靠地尝试这样的事情(以下是python脚本): 用您的access_token

替换YOUR_ACCESS_TOKEN_GOES_HERE
import urllib2
import json
access_token = 'YOUR_ACCESS_TOKEN_GOES_HERE'
request = urllib2.Request('https://graph.facebook.com/263738183707778/?fields=feed.fields%28likes.summary%28true%29.limit%281%29%29.limit%28500%29&access_token='+access_token)
data = urllib2.urlopen(request).read()
data_parsed = json.loads(data)


for a in data_parsed['feed']['data']:
    if 'likes' in a:
        if int(a['likes']['summary']['total_count'])>1000:
            print a['id'].replace('263738183707778_','https://www.facebook.com/ilovetrolls/posts/')

data_parsed = data_parsed['feed']
while 'paging' in data_parsed:
    request = urllib2.Request(data_parsed['paging']['next'])
    data = urllib2.urlopen(request).read()
    data_parsed = json.loads(data)
    for a in data_parsed['data']:
        if 'likes' in a:
            if int(a['likes']['summary']['total_count'])>1000:
                print a['id'].replace('263738183707778_','https://www.facebook.com/ilovetrolls/posts/')

答案 1 :(得分:1)

Facebook Graph API不提供任何此类功能。唯一的方法是使用FQL查询。您可以使用以下FQL查询来检索此信息:

SELECT post_id, like_info.like_count 
FROM stream WHERE source_id = {Your Page Id} 
and like_info.like_count > 1000 LIMIT 50

例如,以下查询将返回为您的网页收到超过1000个赞的帖子:

SELECT post_id, like_info.like_count 
FROM stream WHERE source_id = 263738183707778 
and like_info.like_count > 1000 LIMIT 50

注意:与普通查询相比,在FQL查询结束时使用LIMIT 50将在输出中返回更多帖子。我不知道背后的原因。事实上,我认为这仅仅是因为Facebook API的奇怪行为。

答案 2 :(得分:0)

你不能只通过FQL查询来做到这一点。所以你可以使用this URL。或者在输入位置编写您自己的FQL查询。