Php 加载Facebook数据所需的时间
我正在为一些Facebook页面构建一个分析工具,在这里我可以查看页面信息和统计数据 问题是使用加载数据需要很长时间,完全加载页面需要将近50秒。问题是,当我想在一个月内了解所有新信息,然后将它们全部统计起来时,它需要每天请求一个查询 以下是我正在使用的函数:Php 加载Facebook数据所需的时间,php,facebook,facebook-graph-api,facebook-fql,Php,Facebook,Facebook Graph Api,Facebook Fql,我正在为一些Facebook页面构建一个分析工具,在这里我可以查看页面信息和统计数据 问题是使用加载数据需要很长时间,完全加载页面需要将近50秒。问题是,当我想在一个月内了解所有新信息,然后将它们全部统计起来时,它需要每天请求一个查询 以下是我正在使用的函数: function getmetrics($objectid, $metrics, $end_time, $period){ global $facebook; $fql = "SELECT value FROM insig
function getmetrics($objectid, $metrics, $end_time, $period){
global $facebook;
$fql = "SELECT value FROM insights WHERE object_id=$objectid AND metric='$metrics' AND end_time=end_time_date('$end_time') AND period=$period";
$response = $facebook->api(array(
'method' => 'fql.query',
'query' =>$fql,
));
if (!empty($response)){
return $response[0]['value'];
}
else{
return "no results found";
}
}
function getdailymetrics($objectid, $metrics, $end_time , $days ){
global $facebook;
$total = 0;
do {
$amount = getmetrics($objectid, $metrics, $end_time, '86400');
$total += $amount;
$pieces = explode("-", $end_time);
$end_time = date("Y-m-d", mktime(0, 0, 0, date($pieces[1]),date($pieces[2])-1,date($pieces[0])));
$days--;
} while($days > 1);
return $total;
}
在前端:
<table>
<tr>
<td>Total likes</td>
<?php
$like1 = getmetrics($samsung, 'page_fans', '2012-01-29', '0');
$like2 = getmetrics($samsung, 'page_fans', '2012-02-26', '0');
$likep = round((($like2/$like1)-1)*100, 2);
?>
<td><?php echo $like1; ?></td>
<td><?php echo $likep; ?>%</td>
<td><?php echo $like2; ?></td>
</tr>
<tr>
<td>New Likes</td>
<?php
$newlikes1 = getdailymetrics($samsung, 'page_fan_adds', '2012-01-29', '28');
$newlikes2 = getdailymetrics($samsung, 'page_fan_adds', '2012-02-26', '28');
$newlikep = round((($newlikes2/$newlikes1)-1)*100, 2);
?>
<td><?php echo $newlikes1; ?></td>
<td><?php echo $newlikep; ?>%</td>
<td><?php echo $newlikes2; ?></td>
</tr>
<tr>
<td>Daily New Likes</td>
<td><?php echo round($newlikes1/28); ?></td>
<td><?php echo $newlikep; ?>%</td>
<td><?php echo round($newlikes2/28); ?></td>
</tr>
</table>
总喜欢
%
新爱好
%
每日新爱好
%
有没有办法加快速度,或者有没有更有效的办法?您可以尝试通过两种方式减少请求量。首先,您可以使用批处理请求在一个请求中向FB发送多达50个查询。此外,您还可以尝试更改查询,以便它可以一次请求几天的洞察,如(值列表)中的
end\u time
您还可以对结果进行缓存
而且,这取决于你的特定情况,也许你可以考虑用守护进程来理解(如果你有对象来拉数据),并把它存储在数据库中。< p>我用一个不同的方法来解决这个问题,用这个函数:
function getfromuntil($objectid, $metric, $start_time, $end_time){
global $facebook;
try {
$start_time = $timestamp = strtotime($start_time);
$end_time = $timestamp = strtotime($end_time);
$response = $facebook->api('/'.$objectid.'/insights/'.$metric.'?since='.$start_time.'&until='.$end_time);
} catch (FacebookApiException $e){
error_log($e);
}
$total = 0;
foreach ($response['data'][0]['values'] as $value) {
$total += $value['value'];
}
return $total;
}