はじめに
「Facebookのイイネ数が取れなくなったんだけど」というお話しがきました。
どうやら最近のアップデートなどで取得できなくなったようです。
FacebookのAPI周りはこまめにアップデートされていて、仕様変更などによって取れなくなることがあります。今回の変更(というか古いバージョンの廃止?)は2016年9月ごろにあったとのことでした。
App IDとシークレット
シェア数を取得するためにはApp ID(アプリID)とシークレットが必要となりました。
下記の参考サイトに従ってFacebook Appを作成し、App IDとシークレットを取得しました。
http://wp-suzaku.com/2016/02/01/【2016年版】facebook-app-id(アプリid)の取得方法/
http://itevangelist.net/blog/wordpress-facebook-developers-resgitration-and-add-app

Facebook API
Facebook APIなるものを利用することになります。
ここにログインすると色々と試すことができます。
GETリクエストでだいたい何でもできるようです。
https://developers.facebook.com/docs/graph-api/reference/v2.7/url
公式のサンプルです。
コード
class FacebookShareCount {
/**
* App ID
* 数字のみで構成される
*
* @var string
*/
private $appid = '';
/**
* シークレット
* 16進数文字列で構成される
*
* @var string
*/
private $appsecret = '';
/**
* アクセストークン
* App IDとシークレットを | で繋げたもの
*
* @var string
*/
private $access_token;
public function __construct($appid, $appsecret) {
$this->appid = $appid;
$this->appsecret = $appsecret;
}
/**
* AppIDとsecretがセットされているかどうかチェックする。
* 正当性まではチェックしない。
*
* @throws Exception
*/
private function is_valid_token() {
if ( empty($this->appid) || empty($this->appsecret) ) {
throw new Exception('Appid or App Secret is not set.');
}
}
/**
* FBのシェア数を取得する
*
* @link https://blog.hello-world.jp.net/api/2221/
* @link https://graph.facebook.com/http://www.yahoo.co.jp
* // https://graph.facebook.com/?id=https://www.yahoo.co.jp にアクセス
* @link https://developers.facebook.com/docs/graph-api/reference/v2.7/url
*
* @param $permalink string permalink url
*
* @return int
*
* @throws Exception
*/
public function get_fb_like_count($permalink) {
$this->is_valid_token();
$base_url = 'https://graph.facebook.com/v2.7/'; // OpenGraphプロトコルでアクセスするAPIのエンドポイント
$parameters = array(
'id' => urlencode($permalink), // // カウントを取得するURLをエンコードしたもの
'access_token' => $this->appid .'|'. $this->appsecret,
);
$parameter_pair = array();
foreach ( $parameters as $key => $parameter) { // GETのクエリを=で結ぶ
$parameter_pair[] = $key . '=' . $parameter;
}
$url = $base_url . '?'. implode('&', $parameter_pair);
$content = file_get_contents($url);
$json = json_decode($content);
if ( isset($json->share->share_count) ){
return $json->share->share_count;
} else { // 値が無い場合がある (一度もシェアされていない場合
return 0;
}
}
}
<?php
include 'FacebookShareCount.php';
main();
function main() {
$appid = '';
$secret = '';
$url = 'http://www.yahoo.co.jp';
$fsc = new FacebookShareCount($appid, $secret);
$count = $fsc->get_fb_like_count($url);
var_dump($count);
}
Facebook APIの利用期限
Facebook APIは使用期限があるようです。

今回は最新のv2.7を利用したので延長がなければ2年弱は問題なく使える予定です。
逆に言うと2年経つと使えなくなる可能性があるので注意が必要ですね。
その他
Facebookのイイネ数、シェア数を取得するコードはそこそこ見つかったのですが、APIの使用期限の関連性もあって使えないコードも多くて、思ったより時間を使いました。
APIがバージョンによって廃止になっていることが原因だったようでした。
あと公式ライブラリがあるようですが使い切れませんでした。機会があればそっちも是非やってみたいですね。