[WordPress] SharedCount API を使って簡単にSNSのシェア数を表示する方法
SharedCount: Social URL Analytics (シェアされたカウント数を表示するWebサービスです)のAPIを使ったSNSのシェア数を簡単に表示するという事をやってみたので、詳しくやり方をまとめてみました。
SharedCount API からのデータ取得から WordPress への表示の仕方までをまとめましたが、細かいことも書いていたら長くなってしまいました…。最終的なコードは下の方にあります。
SharedCount API の使い方など
取得できるSNSの種類
SharedCount API で取得できるSNSのカウントデータは次の種類のものになります。
Facebook・Delicious・GooglePlusOne・Buzz・Twitter・Diggs・Pinterest・LinkedIn・StumbleUpon・Reddit
海外のサービスなので、はてなブックマークなどはなく日本ではあまりみかけないSNSも入っていますね。
SharedCount API のデータ取得方法
SharedCount API のデータ取得方法は簡単で、「http://api.sharedcount.com/?url= + カウント数を取得したいエンコードされたサイトアドレス」をGET リクエストで送信するだけです。
例えばこのブログのトップページのSNSカウント数を JSON データで取得する場合は以下のようなアドレスを送信します。
http://api.sharedcount.com/?url=http%3A%2F%2Forientalpage.heteml.net%2Fmemocarilog
アドレスバーに上記を打ち込むと以下のようなデータがかえってきます。
{ "StumbleUpon":0, "Reddit":0, "Facebook":{"commentsbox_count":0, "click_count":0, "total_count":2, "comment_count":0, "like_count":1, "share_count":1 }, "Delicious":2, "GooglePlusOne":1, "Buzz":0, "Twitter":14, "Diggs":0, "Pinterest":0, "LinkedIn":0 }
これがこのブログのSNSカウント数のデータになります。Facebook がトータルで2(4行目)、Twitter では14シェア(8行目)されていることが分かります。このデータを使って WordPress に表示を行います。
WordPress でカウント数データを取得する
WordPress で上記のデータを受け取るには以下のようなコードになります。
$url = get_permalink( $post_id ); // 現在開いているページのURLを取得 $json = file_get_contents("http://api.sharedcount.com/?url=" .rawurlencode($url)); // PHP の file_get_contents関数でJSONデータを読み込み $json へ格納する
これで $json にはSNSカウント数のJSONデータが入りました。しかしこのままでは WordPress で扱えないため、以下のコードで PHP の形式へ変換します。
$counts = json_decode($json, true); // JSONデータを連想配列形式に変換して $counts へ格納する
$counts へは以下のように配列に変換されて入っていますので、あとはこのデータを WordPress へ表示するだけです。
array(10) { ["StumbleUpon"]=> int(0) ["Reddit"]=> int(0) ["Facebook"]=> array(6) { ["commentsbox_count"]=> int(0) ["click_count"]=> int(0) ["total_count"]=> int(2) ["comment_count"]=> int(0) ["like_count"]=> int(1) ["share_count"]=> int(1) } ["Delicious"]=> int(2) ["GooglePlusOne"]=> int(1) ["Buzz"]=> int(0) ["Twitter"]=> int(14) ["Diggs"]=> int(0) ["Pinterest"]=> int(0) ["LinkedIn"]=> int(0) }
WordPress でカウント数を表示する
SNSごとに表示する
各SNSごとに表示するには以下のようなコードになります。(日本でも需要がありそうなものだけにしました)
echo "<p>Facebook ".esc_html($counts["Facebook"]["total_count"])."</p>"; echo "<p>Delicious ".esc_html($counts["Delicious"])."</p>"; echo "<p>Google+1 ".esc_html($counts["GooglePlusOne"])."</p>"; echo "<p>Buzz ".esc_html($counts["Buzz"])."</p>"; echo "<p>Twitter ".esc_html($counts["Twitter"])."</p>"; echo "<p>Diggs ".esc_html($counts["Diggs"])."</p>"; echo "<p>Pinterest ".esc_html($counts["Pinterest"])."</p>";
これを表示すると下の画像のように表示されます。
ソースコードはこんな感じです。
トータルシェア数を表示する
参考サイトのようにトータルシェア数を表示する場合は以下のように各SNSを $totalcounts に足してから表示します。
$totalcounts = $counts["Twitter"] + $counts["Facebook"]["total_count"] + $counts["GooglePlusOne"] + $counts["Pinterest"]; echo "<p>合計→ ".esc_html($totalcounts)."</p>";
最終的なコード
上記までのコードを直接テンプレートファイルへ記入しても表示されますが、管理がしにくくなるので functions.php へコードをまとめます。
functions.php へ以下のように記入してまとめることができます。表示しなくてもよいSNSは削除して下さい。
<? function social_shares() { $url = get_permalink( $post_id ); $json = file_get_contents("http://api.sharedcount.com/?url=" .rawurlencode($url)); $counts = json_decode($json, true); // トータルカウント数を計算 $totalcounts = $counts["Twitter"] + $counts["Facebook"]["total_count"] + $counts["GooglePlusOne"] + $counts["Pinterest"]; // それぞれのSNSシェア数を表示 echo "<p>Facebook→ ".esc_html($counts["Facebook"]["total_count"])."</p>"; echo "<p>Delicious→ ".esc_html($counts["Delicious"])."</p>"; echo "<p>Google+1→ ".esc_html($counts["GooglePlusOne"])."</p>"; echo "<p>Buzz→ ".esc_html($counts["Buzz"])."</p>"; echo "<p>Twitter→ ".esc_html($counts["Twitter"])."</p>"; echo "<p>Diggs→ ".esc_html($counts["Diggs"])." </p>"; echo "<p>Pinterest→ ".esc_html($counts["Pinterest"])."</p>"; // トータルカウント数を表示 echo "<p>合計→ ".esc_html($totalcounts)."</p>"; } ?>
カウント数を表示したいテンプレートの箇所へ以下を記入すればOKです。
<?php social_shares() ?>
各SNS の API の仕様がかわった時に、SharedCount が対応してくれないと表示ができなくなるという可能性がありますが、簡単にカウント数の表示ができていいなと思いました。
参考記事と、この記事では PHP を使って表示する方法をご紹介していますが、API で取得できるのは JSON と JSONP のデータなので JavaScript でも表示することもできます。
JavaScript と PHP ではWebページを表示するまでの順番が変わるので少し注意です。詳しくは以下の記事の「JavaScriptとPHPの動作の違い」の項目が参考になります。
No Comments & Tracbacks