Facebookのいいね数をPHP(WordPress)で取得する。Facebook API以外

今までは Facebookのオリジナルボタンを使ってる時のいいね数を取得する場合、 http://graph.facebook.com/ に URL をくっつけたら取れていましたが、もしかしたら 2015年4月30日 のアップグレードの後に使えなくなるかもしれません。
Facebookプラットフォームアップグレードガイド

Facebookのいいね数を取得する従来のやりかた例

その1

	/**
	 * Facebook count //unversioned
	 *
	 * License: GPLv2 or later
	 */
	$url = urlencode( esc_url( get_permalink() ));
	$results = wp_remote_get( 'http://graph.facebook.com/?id='. $url. '' );
	$parsed_results= json_decode( $results['body'], true );
	$count = isset( $parsed_results['shares'] ) ? $parsed_results['shares'] : 0;

その2

	/**
	 * Facebook count //fql
	 *
	 * License: GPLv2 or later
	 */
	$url = urlencode( esc_url( get_permalink() ));
	$results = wp_remote_get( 'http://api.facebook.com/method/fql.query?format=json&query=select+total%5Fcount+from+link%5Fstat+where+url%3D%22'. urlencode($url). '%22' );
	$parsed_results= json_decode( $results['body'], true );
	$count = isset( $parsed_results[0]['total_count'] ) ? $parsed_results[0]['total_count'] : 0;

 
 

Facebookのいいね数を取得する最新(ver2.2)のやりかた例

	/**
	 * Facebook count //ver2.2
	 *
	 * License: GPLv2 or later
	 */
	$access_token = 'CAACEd・・・・';

	$url = urlencode( esc_url( get_permalink() ));
	$results = wp_remote_get( 'https://graph.facebook.com/v2.2/'. $url. '?access_token='. $access_token. '' );
	$parsed_results= json_decode( $results['body'], true );
	$count = isset( $parsed_results['share']['share_count'] ) ? $parsed_results['share']['share_count'] : 0;

ver2.2 は「Access Token」が必要な方法になっています。

Access Tokenは「User Access Token」と「App Access Token」があります。どちらを使えばいいのかは不明ですが(どちらも動きます)、FaceBook Graph API Explorer でテストする時は「User Access Token」を使います。
しかし「User Access Token」の方は「期限」がありました。

「User Access Token」の期限が切れた時のエラーコード

array (size=1)
  'error' => 
    array (size=4)
      'message' => string 'Error validating access token: Session has expired on 2015年1月14日 21:00. The current time is 2015年1月14日 23:04.' (length=121)
      'type' => string 'OAuthException' (length=14)
      'code' => int 190
      'error_subcode' => int 463

「User Access Token」は 延長できるようですが 切れる都度、更新しなければなりません。
Facebook Access Token Debugger (Expires (in about 2 months) の所です。)
Facebook Access Token Debugger
しかし「無期限 Facebookアクセストークンの取得方法」という記事を見つけて、喜び勇んでやってみましたが無期限にはなりませんでした。
「App Access Token」は期限はありませんので「App Access Token」を使えばいいのか と思いましたが、不安なのでしばらくようすを見る事になりました。

 
 

Facebookのいいね数をPHP(WordPress)で取得する。v2.2以外

と、いう事で不明な所がありましたので FaceBookの公式ボタンのhtmlソースからいいね数を取得する事にしました。
Like Button for the Web」で、いちばんシンプルなボタンを作成してURLを取得します。

facebook-2 ←このボタンのhtmlソースを見ると…
facebook-3
ありましたので 前後のタグをキーにして抽出します。

	/**
	 * Facebook count // html
	 *
	 * License: GPLv2 or later
	 */
	$appid = 'XXXXXXXXXXX';

	$url = urlencode( esc_url( get_permalink() ));
	$results = wp_remote_get( 'http://www.facebook.com/plugins/like.php?href=' . $url . '&width&layout=button_count&action=like&show_faces=true&share=false&height=21&appId='.$appid );
	$parsed_results = $results['body'];
	preg_match( '/<span class="pluginCountTextDisconnected">(\d+)<\/span>/i', $parsed_results, $match );
	$count = isset( $match[1] ) ? $match[1] : 0;

これならしばらくは使えるかなと思います。($appidは無くてもなぜか動きました)

2016/11追記 現在はこのようにしています。

	preg_match( '/<span class="_5n6h _2pih".+>(\d+)<\/span>/i', $parsed_results, $match );

このように Facebook の API は仕様変更が頻繁にありますので、将来 使えなくなった時のために 何種類かの方法を試していれば、いざと言う時の対応は早いと思います。

 

 

参考

Facebookプラットフォームアップグレードガイド
https://developers.facebook.com/docs/apps/upgrading

FaceBook Graph API Explorer
https://developers.facebook.com/tools/explorer/

Facebook Access Token Debugger
https://developers.facebook.com/tools/debug/accesstoken

無期限 Facebookアクセストークンの取得方法
http://qiita.com/dogyear/items/e4de999971fbf7231496