Facebook API批量请求非常慢

时间:2012-06-15 16:41:46

标签: facebook facebook-graph-api

我正在编写一个网络应用程序,允许用户从他们的Facebook个人资料以及他们的朋友(他们也授权该应用程序)中搜索数据。最初,我正在循环访问朋友并进行单独的API调用以获取朋友数据,但这非常缓慢。所以我切换到构建一系列API请求并提交一个batch request

批处理请求应该是我的问题的解决方案,但它仍然令人痛苦地缓慢。我的页面加载大约15秒,我无法弄清楚原因。文档声称批处理中的每个请求都是并行处理的,但肯定不是这样。我的每个批处理请求都采用唯一的访问令牌是否相关?该文档并未表明这是一个问题,但文档并没有说明很多事情......

以下是我的一个批处理查询的示例:

[
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"},
{"method":"GET",
"relative_url":"\/#####\/friends?fields=name,first_name,last_name,id,work,education&access_token=#####"}
]

为了给你一些上下文,该应用程序发出一个API请求来获取用户的朋友。然后它循环遍历这些结果并为每个朋友(已授权应用程序)构建批处理请求,并使用PHP SDK发送第二个API批处理请求($ json_batch是一个批处理请求,如上所示):

$rawdata = $facebook->api('?batch='.$json_batch, 'POST');

(以上举例说明)。检查累积结果是否与用户的搜索查询匹配,并回显给用户。任何想法为什么这需要20秒才能发生?

更新 我添加了一些代码来跟踪执行脚本期间不同时间的时间... 整个课程在11-13秒内完成。第一个FB api调用(到图表)需要0.6秒。第二批电话是10-11秒!但是为什么?

1 个答案:

答案 0 :(得分:0)

我不确定为什么批量请求需要那么长时间,但是为了按照请求回答访问令牌,不一定要这样做,除非你使用不同的令牌,如果你使用相同的令牌,那么你可以简单地(如在文档中):

curl \
    -F 'access_token=…' \
    -F 'batch=[ \
            {"method": "GET", "relative_url": "me"}, \
            {"method": "GET", "relative_url": "me/friends?limit=50"} \
        ]'\
    https://graph.facebook.com

但是,您可以使用single FQL query

获取相同的确切信息
SELECT uid, username, name, first_name, middle_name, last_name, work, education 
FROM user 
WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

这也消除了首先为登录用户的朋友分别查询的需要,但是如果你有朋友ID列表,你可以将它们放在IN子句而不是内部查询中。登记/> 也许这个fql解决方案会更快返回。

相关问题