2012-03-29 32 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)
你也可以做一些緩存結果。
而且,雖然這取決於您的特定情況,也許您可​​以考慮使用守護進程(如果您有要將數據提取的對象)提取洞察並將其存儲在數據庫中。