WordPressでソーシャルメディアのカウント数を取得して表示する方法

4 5 B!4 0
ファングラーのコーポレートサイトではTweetボタンなどのソーシャルメディアのカウント&ボタンは自作してあります。
自作の経緯としては各ソーシャルメディアのJavaScriptを読み込むと重くなるという理由と、デザインをサイトにあったオリジナルの物にしたかったからです。
(しかしオリジナルのボタンの方がクリック率が良いんですよね…)
 
今回はWordPressで各ソーシャルメディアのカウント数を取得して表示する方法をまとめましたので、参考にして下さい。

はじめに

各ソーシャルメディアのAPIを利用します。funglr.comでは以下のソーシャルメディアのカウント数を取得しています。

  • ・Twitter
  • ・Facebook
  • ・Google+
  • ・LinkedIn
  • ・Pocket
  • ・はてなブックマーク

まずfunction.phpに各APIを利用してカウント数を取得します。
その後、表示したいテンプレート(content.phpやsingle.phpなど)に出力します。コピペで使える様に以下にコードをまとめましたので参考にしてみて下さい。

Twitter

function.php
function twitter($url){
$get_twitter = 'http://urls.api.twitter.com/1/urls/count.json?url=' . $url;
$json = file_get_contents($get_twitter);
$json = json_decode($json);
$twitter = $json->{'count'};
print("$twitter");
}

テンプレート
<?php twitter(get_permalink()); ?>

※Twitterは2015年11月20日でツイート数のカウントが取得できなくなります。

Facebook

function.php
function facebook($url){
$get_facebook = 'http://api.facebook.com/restserver.php?method=links.getStats&urls=' . $url;
$xml = file_get_contents($get_facebook);
$xml = simplexml_load_string($xml);
$facebook = $xml->link_stat->total_count;
print("$facebook");
}

テンプレート
<?php facebook(get_permalink()); ?>

Google+

function.php
function plus1($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://clients6.google.com/rpc");
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, 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($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-type: application/json'));
$curl_results = curl_exec ($curl);
curl_close ($curl);
$json = json_decode($curl_results, true);
return intval( $json[0]['result']['metadata']['globalCounts']['count'] );
}

テンプレート
<?php echo plus1(get_permalink()); ?>

はてなブックマーク

function.php
function hatena($url){
$get_hatebu = 'http://api.b.st-hatena.com/entry.count?url=' . $url;
$hatebu = file_get_contents($get_hatebu);
if($hatebu == ""){$hatebu = 0;}
print("$hatebu");
}

テンプレート
<?php hatebu(get_permalink()); ?>

LinkedIn

function.php
function linkedin($url){
$json = @file_get_contents("http://www.linkedin.com/countserv/count/share?url=".rawurlencode($url));
$json = rtrim($json,');');
$json = ltrim($json,'IN.Tags.Share.handleCount(');
$array = json_decode($json,true);
$linkedin = $array['count'];
print("$linkedin");
}

テンプレート
<?php linkedin(get_permalink()); ?>

Pocket

function.php
function pocket($url) {
$query = 'http://widgets.getpocket.com/v1/button?v=1&count=horizontal&url=' . $url;
$html = file_get_contents($query);
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->preserveWhiteSpace = false;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$result = $xpath->query('//em[@id = "cnt"]')->item(0);
return isset($result->nodeValue) ? intval($result->nodeValue) : 0;
}

テンプレート
<?php echo pocket(get_permalink()); ?>

まとめ・表示例

こんな感じに記述すれば各ソーシャルメディアのカウント数が表示されます。
ファングラーの記事一覧では以下の様な感じで表示させています。
 
funglr.com
 
記事一覧に各ソーシャルメディアのカウント数が表示されてると人気記事が一目瞭然で良いですね。