我是iPhone上Fazzle app的作者。我的应用程序所做的基本上是下载用户状态更新并按各种顺序对它们进行排序(例如,最喜欢,最多评论)。
我一直想知道Facebook是否允许开发者自加入Facebook之日起获得用户的状态更新,因为当我启动应用程序时,我只能获得2009年的用户状态。今天我刚刚发现Facebook限制图形API调用自2011年以来。
我尝试查看文档asked around here,并通过论坛联系Facebook。但到目前为止,Graph API中没有关于此限制的说法。我错过了什么?我还有其他方法可以在2011年之前获取状态更新数据吗?
您可以自己测试here。使用此GET请求:
https://graph.facebook.com/(your_user_id)/statuses?limit=99999
向下滚动,您会发现并非所有内容都已下载。
这是因为与Facebook时间线的利益冲突吗?如果是这样,那很糟糕。
记录为错误here。仍然希望有人可以指出我的错误,如果有的话。
答案 0 :(得分:10)
绝对可以从Graph API中获取较旧的帖子;没有限制(至少不是我所知道的)。使用since
和until
参数返回结果,而不是offset
:
https://graph.facebook.com/me/feed?access_token=[token]&until=1165474447
Documentation 分页在since
和until
上不会非常深入:
查询连接时,有几个有用的参数可用于过滤和翻页连接数据:
- limit,offset:https://graph.facebook.com/me/likes?limit=3`
- 直到,因为(一个unix时间戳或strtotime接受的任何日期):
https://graph.facebook.com/search?until=yesterday&q=orange
但基本上,until
就像是说“直到这个日期给我发帖”,而且类似于“给我这个日期以来的帖子”。所以你可以使用这样的循环在用户的Feed中一直滚动回来:
// pseudocode
timestamp = now
do {
posts = graph.get(/me/feed?until=timestamp)
if posts.length == 0: break;
// process posts
timestamp = posts[0].created_time // first should be the oldest, in theory
} while (1)
将until
替换为since
,将最早的created_time
替换为最新版本,以便及时转发,例如:从上次用户运行应用程序以来抓取任何较新的帖子。
答案 1 :(得分:2)
Facebook已经confirmed this as a bug。如果您曾经关注Facebook的错误跟踪器,不幸的是,这意味着他们实际上很难解决这个问题。
答案 2 :(得分:0)
您需要分页。限制有限。请阅读http://developers.facebook.com/blog/post/478/