IE6-8 is Not Supported

PHP を使って Facabook, Twitter, Google+, はてブのシェア数を取得する方法

シェア系のプラグインがわりと重いのでシェア数だけ取得する何かいい方法を探していたら、API を叩くのがてっとり早いのではないかということでちょっとメモ。Facebook のシェア数は少し特殊みたいのなので2種類メモっておきます。

1. Facebook

$url = 'YOUR URL';
$fb = @file_get_contents('http://graph.facebook.com/' . $url . '/');
$fb = json_decode($fb, true);
if (!isset($fb['shares'])) { $count = 0; }
// likes = いいね!数 / shares = シェア数
else { $count = $fb['shares']; }
$fb_count = $count;
echo $fb_count;
$url = 'YOUR URL';
$fb = 'http://api.facebook.com/restserver.php?method=links.getStats&urls=' . $url;
$xml = @file_get_contents($fb);
$xml = simplexml_load_string($xml);
// like_count = いいね!数 / share_count = シェア数 / total_count = いいね!数 + シェア数
$fb_count = $xml->link_stat->total_count;
echo $fb_count;

Facebook のシェア数は Graph API を叩く方法と、Restserver を叩く方法があるのですが、どうやら Graph API のほうが正しく数値を取れない URL がある模様。自分のポートフォリオでは正しい値を取得できず OG Debugger でキャッシュを消しても無理だったので後述の方を使ったらうまくいきました。

どちらを使うかは リクエスト API を直接ロケーションバーに打ってちゃんと値が入ってるか確認するのがいいかと思います。

2. Twitter

$url = 'YOUR URL';
$tw = @file_get_contents('http://urls.api.twitter.com/1/urls/count.json?url=' . $url );
$json = json_decode($tw, true);
$tw_count = $json['count'];
echo $tw_count;

3. Google+

$url = 'YOUR URL';
if(isset($_GET['url'])) $url = $_GET['url'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ');
curl_setopt($ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . $url . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
$result = curl_exec($ch);
curl_close($ch);
$gp = json_decode($result, true);
if (!isset($gp[0]['result']['metadata']['globalCounts']['count'])) { $count = 0; }
else { $count = $gp[0]['result']['metadata']['globalCounts']['count']; }
$gp_count = $count;
echo $gp_count;

Google+ には Facebook や Twitter のような API がないらしく CURL というものを使うのだとか。ここらへんはさっぱりです。

4. Hatena Bookmark

$url = 'YOUR URL';
$hatebu = 'http://api.b.st-hatena.com/entry.count?url=' . $url;
$count = @file_get_contents($hatebu);
if(!isset($count) || !$count) { $count = 0; }
$hatebu_count = $count;
echo $hatebu_count;

今回、よく使いそうな4つの SNS のシェア数の取得法を試しましたが、参考元にさせて頂いた記事ではより多くの SNS と Ajax での取得法も記載されています。

普通のシェアボタンを設置したい方は 【前回の記事】Facebook, Twitter, Google+ などの各種 SNS シェアボタンを設置するコードまとめ をどうぞ。

Reference: ソーシャルカウントの取得方法まとめ(全9サイト) – Syncer

ads by google