首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 獲取 Facebook 粉絲專頁粉絲數實作教學

     編輯:PHP 綜合知識

前言

註:本文所述方法基於舊版 Facebook REST API(FQL),已於 2016 年停止支援。現代應用請使用 Graph API 搭配 Access Token 獲取粉絲數。本文保留原代碼供參考,並提供現代化實作方案。

舊版代碼(已失效)

<?php
$page_id = "YOUR_PAGE_ID";
$xml = @simplexml_load_file(
    "https://api.facebook.com/restserver.php?method=facebook.fql.query" .
    "&query=Select%20fan_count%20FROM%20page%20Where%20page_id=" . $page_id
) or die("API 請求失敗");

$fans = $xml->page->fan_count;
echo $fans;
?>

現代化實作:Graph API v18+

1. 前置準備

  • 在 Meta for Developers 建立應用程式
  • 取得 App ID 與 App Secret
  • 使用 Graph API Explorer 生成 Page Access Token(需 pages_read_engagement 權限)
  • 長期 Token 建議透過伺服器端定期刷新

2. 完整實作代碼

<?php
/**
 * 獲取 Facebook 粉絲專頁粉絲數
 * 
 * @param string $pageId 專頁 ID 或用戶名
 * @param string $accessToken Page Access Token
 * @return int|false 粉絲數或失敗回傳 false
 */
function getFacebookFanCount($pageId, $accessToken) {
    $url = "https://graph.facebook.com/v18.0/{$pageId}";
    $params = [
        'fields' => 'fan_count',
        'access_token' => $accessToken,
    ];
    
    $ch = curl_init($url . '?' . http_build_query($params));
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_USERAGENT => 'PHP-Facebook-FanCount/1.0',
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode !== 200) {
        error_log("Facebook API 錯誤: HTTP {$httpCode}, Response: {$response}");
        return false;
    }
    
    $data = json_decode($response, true);
    
    if (json_last_error() !== JSON_ERROR_NONE) {
        error_log("JSON 解析失敗: " . json_last_error_msg());
        return false;
    }
    
    if (isset($data['error'])) {
        error_log("Facebook API 回傳錯誤: " . $data['error']['message']);
        return false;
    }
    
    return $data['fan_count'] ?? false;
}

// 使用範例
$pageId = 'YOUR_PAGE_ID'; // 或專頁用戶名
$accessToken = 'YOUR_PAGE_ACCESS_TOKEN'; // 長期 Token

$fanCount = getFacebookFanCount($pageId, $accessToken);
if ($fanCount !== false) {
    echo "粉絲數: " . number_format($fanCount);
} else {
    echo "無法獲取粉絲數,請檢查日誌";
}

3. 快取優化(必要)

Facebook API 有呼叫頻率限制,建議快取結果:

function getCachedFanCount($pageId, $accessToken, $ttl = 3600) {
    $cacheKey = "fb_fans_{$pageId}";
    $cacheFile = sys_get_temp_dir() . "/{$cacheKey}.cache";
    
    // 檢查快取
    if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < $ttl)) {
        return (int)file_get_contents($cacheFile);
    }
    
    $count = getFacebookFanCount($pageId, $accessToken);
    if ($count !== false) {
        file_put_contents($cacheFile, $count, LOCK_EX);
    }
    
    return $count ?? 0;
}

4. 前端顯示範例(AJAX 非同步載入)

<!-- HTML -->
<div id="fb-fan-count">載入中...</div>

<script>
fetch('/api/get-fan-count.php?page_id=YOUR_PAGE_ID')
    .then(res => res.json())
    .then(data => {
        if (data.success) {
            document.getElementById('fb-fan-count').textContent = 
                data.count.toLocaleString() + ' 位粉絲';
        }
    });
</script>

常見問題排查

錯誤原因解決
Invalid OAuth access tokenToken 過期或無效重新生成長期 Token,建立自動刷新機制
Permission error缺少 pages_read_engagement 權限在 App 審核中申請權限,或使用 Graph API Explorer 手動授權
Page not foundPage ID 錯誤或專頁已刪除確認 Page ID(可用 /me/accounts 列出管理的專頁)
Rate limited呼叫頻率過高實作快取、指數退避重試

結語

Facebook API 版本迭代快速,開發者應持續關注 官方更新日誌。建立健全的錯誤處理、快取與監控機制,才能確保粉絲數顯示功能長期穩定運作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved