Facebook API非常缓慢。

3
我正在尝试制作一款应用程序,使用Facebook PHP SDK 从您的 Facebook 好友那里获取所有生日和其他信息。我通过获取好友列表,然后使用 foreach 循环获取每个好友 ID 的所有信息来实现这一点。
这都可以正常运行,但是获取所有信息需要 4 分钟或更长时间(对于每个好友,我都必须进行新的调用)。我无法期望我的应用程序用户等待那么长的时间。
有没有一种更快地获取信息的方法?
以下是我的代码:

    //$arrFriends is a list with all id's and names of friends

foreach ($arrFriends as $f => $value)
            {
                echo('<pre>');
                $fql = "select uid, email, name, hometown_location, sex, birthday, education, relationship_status, pic_square from user where uid=" . $value[id];
                $param = array('method' => 'fql.query','query' => $fql,'callback' => '');
                $friend = $facebook->api($param);
                //dan opslaan in de database:
                print_r($friend);
                echo('</pre>');
            }
3个回答

5

您可以使用

SELECT uid, name, pic_square FROM user WHERE uid = me()
OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())

参考:https://developers.facebook.com/docs/reference/fql/

同样的结果,快速、迅捷、优雅的解决方案。愿性能与你同在。


另一个解决方案(供您参考)

如果你有数百个朋友,那是很正常和预期的。您正在在循环中请求 Facebook API 数百次。

许多可扩展的 Facebook 应用程序会异步地在后台(在任务队列中)或者完全在不同的机器上执行该任务,以避免减慢速度并消耗 CPU 资源。

尝试在 FQL 查询中使用 OR 连接词。

$fql = "select [...] from user where uid=123213312 OR uid=129038823 OR uid=893423890

但是在这种情况下,您的FQL查询会变得越来越大,以至于您必须将其分开。因此,请使用第一种解决方案。


呃,子查询。FQL支持连接吗? - Phil
太棒了。 <3 Facebook 工程团队。 - ahmet alp balkan
在后台执行的问题在于 API 令牌。如果用户已注销登录,则无法获取请求额外权限的信息。谢谢您的回答! - samuhe
"FQL将在2.0版本后停止使用。请将您的应用程序迁移到使用Graph API而不是FQL。" https://developers.facebook.com/docs/technical-guides/fql/ https://developers.facebook.com/docs/graph-api - Andrew

1
每个fql查询都涉及到向Facebook发出http请求,这可能会很慢。
如果您可以设计一个查询以在单个响应中生成所有结果,然后在循环中处理该响应,那么您很可能会获得更好的性能。

1

如果您不想使用FQL,批量请求就是为了这个目的而设计的。您可以构建一个图形请求数组并将它们一起发送。根据文档,它们会并行处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接