php – Codeigniter – 取得你想要的 Facebook 分享/點讚次數

這裡使用的是 PHP Codeigniter 來做示範。基本上傳統寫法的 PHP 稍微修改一下就可以了。

FB SDK版本

facebook-php-sdk-v4-5.0.0

Controller::SDK() 先寫好後續載入的 SDK 方法

PHP SDK 可以在這邊下載。因為初始化 SDK 會重複使用,所以可以獨立出來。

protected function sdk()
{
    //你下載的地方
    include_once(APPPATH . 'libraries/facebook_sdk/v4/autoload.php');
    $fb = new Facebook\Facebook([
      'app_id' => 你的 app_id,
      'app_secret' => 你的 app_secret,
      'default_graph_version' => 'v2.5', //預設可以不填寫。這是指定你的版本
    ]);
    return $fb;
}

 

Controller::facebook_login() 認證登入

取得 Facebook 的分享數量是不需要任何權限,但是仍然需要將你的 Facebook 做登入APP的動作。將權限與登入的路徑組合後,透過 redirect() 前往 FB 的認證授權頁面。

public function facebook_login()
{
    $fb = $this->sdk();

    // 登入網址
    // https://developers.facebook.com/docs/php/gettingstarted?locale=zh_TW
    $helper = $fb->getRedirectLoginHelper();
    $permissions = ['email', 'user_likes']; // 選用需要的權限
    $loginUrl = $helper->getLoginUrl(網址為 facebook_login_callback 的方法, $permissions);
    redirect($loginUrl);
}

因為我們這次的範例,只是要取得 share 數量,所以其實是可以不需要任何權限的。參考官方文件

Controller::facebook_login_callback() 返回後的認證

我們將在這裡取得令牌 Access Token ,再導往下一個分頁。注意 getAccessToken 因為只能被呼叫一次,所以當取得令牌後如果沒有執行動作,一旦重新整理頁面的話,會拋出警告錯誤。

public function facebook_login_callback()
{
    $fb = $this->sdk();

    // 取得 access_token
    $helper = $fb->getRedirectLoginHelper();
    $accessToken = $helper->getAccessToken();
    if (isset($accessToken)) 
    {
        // 將 access token 紀錄在 session
        $_SESSION['facebook_access_token'] = (string) $accessToken;

        redirect(將網址導向 faceook_like 方法);  
    }
}

Controller::faceook_like() 發送請求來取得分享數量

public function faceook_like()
{
    $fb = $this->sdk();

    // 設定預設的令牌
    // https://developers.facebook.com/docs/php/gettingstarted?locale=zh_TW
    $fb->setDefaultAccessToken($_SESSION['facebook_access_token']);

    // 你想要查詢分享數量的網址
    $url       = "...";

    // 方法 1 (簡單好懂)
    // https://developers.facebook.com/docs/php/FacebookResponse/5.0.0
    $response  = $fb->get("/?id={$url}");
    $graphNode = $response->getGraphNode();

    // 方法 2
    // https://developers.facebook.com/docs/php/FacebookRequest/5.0.0
    // $request   = $fb->request('GET', "/?id={$url}");
    // $response  = $fb->getClient()->sendRequest($request);
    // $graphNode = $response->getGraphNode();

    // 取得 share 資訊
    $graphNode['share']['comment_count']; //討論數量
    $graphNode['share']['share_count']; // 分享數量
}

基本上如果我們 print_r($graphNode) 的話,可以看到類似這樣的結構

Facebook\GraphNodes\GraphNode Object
(
    [items:protected] => Array
        (
            [og_object] => Facebook\GraphNodes\GraphNode Object
                (
                    [items:protected] => Array
                        (
                            [id] => 編號
                            [type] => website
                            [updated_time] => DateTime Object
                                (
                                    [date] => 2016-02-29 08:40:27.000000
                                    [timezone_type] => 1
                                    [timezone] => +00:00
                                )

                            [url] => 你要查詢的網址
                        )

                )

            [share] => Facebook\GraphNodes\GraphNode Object
                (
                    [items:protected] => Array
                        (
                            [comment_count] => 0
                            [share_count] => 1
                        )

                )

            [id] => 你要查詢的網址
        )

)

所以只要取得 share 中的 comment_count 與 share_count 就輕易完成囉!

Comments

  1. 非常瀟灑的學習網站, 對我學習肯定會有很大的助力, 請問我用 Win 7 + Maker 12 可以嗎? 我是初學可以給個學習方法及方向嗎? 謝謝…..

    • Win 7 + Maker 12 這部分我就沒有觸到了,謝謝你的肯定。

發表迴響