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

這裡使用的是 PHP Codeigniter 來做示範。基本上傳統寫法的 PHP 稍微修改一下就可以了。
FB SDK版本
facebook-php-sdk-v4-5.0.0
Controller::SDK() 先寫好後續載入的 SDK 方法
PHP SDK 可以在這邊下載。因為初始化 SDK 會重複使用,所以可以獨立出來。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 的認證授權頁面。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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 因為只能被呼叫一次,所以當取得令牌後如果沒有執行動作,一旦重新整理頁面的話,會拋出警告錯誤。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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() 發送請求來取得分享數量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
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) 的話,可以看到類似這樣的結構
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
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 就輕易完成囉!
Alex K
2016-05-05 - 07:43
非常瀟灑的學習網站, 對我學習肯定會有很大的助力, 請問我用 Win 7 + Maker 12 可以嗎? 我是初學可以給個學習方法及方向嗎? 謝謝…..
jsn
2016-05-26 - 11:57
Win 7 + Maker 12 這部分我就沒有觸到了,謝謝你的肯定。