我该如何模块化这个应用程序?你能给我一个代码级简单的例子吗?

时间:2012-10-18 19:54:14

标签: php facebook

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

它所做的主要事情是

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

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

问题领域 1.步骤3总是超过Max_Execution_Time。

解决方案限制 1.只想坚持使用php。没有Python / ruby​​。

我的代码框架是:

<?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 ""
?>

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

  1. Field Expansion
    获得前100位朋友的名字和5部电影:

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

    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/
    
  3. 现在我真的建议考虑分页而不是一起删除limit字段。如果分页与您的应用程序相关,它可以增强体验很多!