2012-03-29 52 views
0

我正在为某些Facebook页面构建分析工具,以查看页面信息和统计信息。加载Facebook数据所需的时间

问题是,使用FQL加载数据需要很长时间,几乎需要50秒才能完全加载页面。问题是,如果我想在一个月内知道所有新的likes,然后对它们进行计数,则需要每天请求查询。

这是我使用的功能:

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> 

有没有办法加快这还是有一个更有效的方法?

回答

0

我解决了与获取数据的一个不同的方法中的问题,使用此功能:

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; 
} 
1

您可以尝试以两种方式减少请求数量。首先,您可以使用批量请求在一个请求中向FB发送多达50个查询。您也可以尝试更改查询,以便它可以一次请求数天的数据分析,例如end_time in (values_list)
你也可以做一些缓存结果。
而且,虽然这取决于您的特定情况,也许您可​​以考虑使用守护进程(如果您有要将数据提取的对象)提取洞察并将其存储在数据库中。