0

我的应用程序有一个 index.php

它做的主要事情是


1.使用facebook登录让用户登录到我的应用程序。(将来我将使用其他网站,如 google 等登录等)
2. “主要工作”是否
3. 显示结果。

主要工作:
1. 从fb获取访问令牌。- 花费 <10 毫秒
2. 获取数据集 1 - 使用 accesstoken 并获取有关用户的数据。- 大约需要一秒钟。
3. 获取数据集 2 - 蜘蛛列表中的每个朋友以获取特定信息 - 每个朋友大约需要一秒钟。因此,平均需要大约 300 秒。
4. 做一些处理 - 几秒钟

问题区域 1. 第 3 步总是超过 Max_Execution_Time。

解决方案限制 1. 希望只坚持使用 php。没有 Python/红宝石。

我的代码骨架是:

<?php

//  Login
$facebook->getloginurl ......

//Main work
$access_token = $facebook-> ...... 
$user_id = $facebok->get ......

// Following is the time consuming step
foreach $friend_of_that_user .... get information required for this app.

//Displays result
echo ""
?>
4

2 回答 2

1

您正在为每个朋友提出一个请求!这可以通过以下方法之一来增强:

  1. 领域扩展
    获取前 100 位好友的姓名和 5 部电影:

    me?fields=friends.limit(100).fields(name,movies.limit(5).fields(name))
    
  2. Batch API
    例如,要获取 5 个朋友的详细信息,您可以发出以下 Batch 请求:

    curl \
       -F 'access_token=...' \
       -F 'batch=[{ "method":"GET","name":"get-friends","relative_url":"me/friends?limit=5",},{"method":"GET","relative_url":"?ids={result=get-friends:$.data.*.id}"}]' \
       https://graph.facebook.com/
    

现在我真的建议考虑分页而不是limit一起删除该字段。如果分页与您的应用程序相关,它可以大大增强体验!

于 2012-10-18T20:26:52.493 回答
1

foreach循环是问题所在。您正在为每个朋友进行单独的 API 调用。这需要永远并且不需要。如此多的 API 调用也会很快让您的应用程序被阻止。

对用户进行身份验证后,您可以调用 以$facebook->api('/me/friends?fields=id,name,picture,...', 'GET');在一次调用中获取所需的所有数据。在糟糕的一天,这应该需要 <5 秒。只要您拥有正确的权限,您就可以通过字段扩展深入了解您朋友的数据。

如果您有一个拥有大量朋友的用户,Facebook 可能会对结果进行分页。即使这样,您也应该在不超过 10 个 API 调用中获得所需的一切。

于 2012-10-18T20:15:20.123 回答