![original_sns_button_thumb]()
もくじ
仕上がりイメージ
仕上がりイメージはこんな感じです。ボタンの種類は今回は自分がサイト制作時によく設置する以下の5つ(Twitter/Facebook/Google+/はてなブックマーク/LINE)とします。
![オリジナルNSボタン]()
※LINEボタンについては残念ながらシェア数の取得方法がわかりませんでしたので、LINEボタンのみ吹き出しはナシです。
※LINEボタンはオリジナルデザインにできない決まりなので、LINEボタンのみ公式デザインです。
今回もサンプルを作ってみましたよ〜。
サンプル
お世話になった記事
今回の記事は以下のサイト様にお世話になりました!ありがとうございます!特にPHPでのシェア数の取得方法は本当に助かりました。もはや今回の記事はこちらのサイト様なしでは書けませんでした。感謝です〜><
PHPでSNSシェア数を取得する
まずはPHPでシェア数を取得。取得したシェア数はオリジナルボタンを設置する時に出力させたいので、今回はひとまずそれぞれの変数に格納しています。もし、その場で確認したい場合は「echo」などで出力させてくださいね。
また、該当ページのURLはJSONデータを取得する際に直接指定してもいいのですが、複数のSNSボタンを設置する場合はURLを変数化しておくと便利!
Twittter
[php]
<?php
//ページのURLを変数に格納
$url='シェア数を取得したいページのURL';
//JSONデータを取得
$json = @file_get_contents('http://urls.api.twitter.com/1/urls/count.json?url=' . $url . '');
//JSONデータを連想配列に直す
$array = json_decode($json,true);
//$twitter_countという変数に格納
$twitter_count = $array['count'];
?>
[/php]
Facebook
Facebookは、カウントが0だと「0」というデータを返してくれないそうです。なので、存在しない場合は「0」と表示させるために、カウント数の取得の前にif文を書きます。
[php]
<?php
//ページのURLを変数に格納
$url='シェア数を取得したいページのURL';
//JSONデータを取得
$json = @file_get_contents('http://graph.facebook.com/?id=' . $url . '');
//JSONデータを連想配列に直す
$array = json_decode($json,true);
//データが存在しない場合は0を返す
if(!isset($array['shares'])){
$count = 0;
}else{
$count = $array['shares'];
}
//$facebook_countという変数に格納
$facebook_count = $count;
?>
[/php]
Google+
Google+にはTwitterやFacebookのようなAPIがないそうです。私もほうぼう探しまわったけど見つかりませんでした…。なので、
Syncerさんのサイトで紹介されていた時は小躍りしました!ありがたや。「CURL」というものを使うんですね。
[php]
<?php
//ページのURLを変数に格納
$url='シェア数を取得したいページのURL';
//CURLを利用してJSONデータを取得
$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 );
//JSONデータからカウント数を取得
$obj = json_decode( $result, true );
//カウントが0の場合
if(!isset($obj[0]['result']['metadata']['globalCounts']['count'])){
$count = 0;
}else{
$count = $obj[0]['result']['metadata']['globalCounts']['count'];
}
//$gplus_countという変数に格納
$gplus_count = $count;
?>
[/php]
はてなブックマーク
[php]
<?php
//ページのURLを変数に格納
$url='シェア数を取得したいページのURL';
//APIではてブ数を取得
$count = @file_get_contents('http://api.b.st-hatena.com/entry.count?url=' . $url . '');
//カウントが0の場合
if(!isset($count) || !$count){
$count = 0;
}
//$hatena_countという変数に格納
$hatena_count = $count;
?>
[/php]
もっとたくさんのSNSのシェア数を取得したい!という方は参考にさせていただいたこちらの記事へどうぞ。APIの利用方法の段階から丁寧に解説してくださってます!!
オリジナルSNSボタンを設置する
続いてSNSボタンの設置方法です。「シェアしたいURL」「ページタイトル」などの部分は直接指定してもいいですが、ミスが怖いので私はPHPを使う時は変数化してます!
また、私はTwitterなどのボタンのaタグに「target="_blank"」を設定しています。その方がページが遷移したということが伝わりやすいと思うので。ですが、この辺は好みの問題もありますので適宜調整してくださいね!
Twittter
Twitterについてはシェアする情報に加えてハッシュタグをつけたりなど色々できますよね。必要に応じて削ったりしてください!
[html]
<a href="http://twitter.com/share?url=[シェアしたいURL]&text=[ツイート内容]&via=[ツイート内に含むユーザー名]&related=[ツイート後に表示されるユーザー]&hashtags=[ツイート内に含まれるハッシュタグ]" target="_blank"><img src="オリジナルSNSボタンの画像" alt="Twitterでシェア"></a>
[/html]
Facebook
[html]
<a href="http://www.facebook.com/share.php?u=[シェアしたいURL]" onclick="window.open(this.href, 'FBwindow', 'width=650, height=450, menubar=no, toolbar=no, scrollbars=yes'); return false;"><img src="オリジナルSNSボタンの画像" alt="Facebookでシェア"></a>
[/html]
Google+
[html]
<a href="https://plus.google.com/share?url=[シェアしたいURL]" onclick="window.open(this.href, 'Gwindow', 'width=650, height=450, menubar=no, toolbar=no, scrollbars=yes'); return false;"><img src="オリジナルSNSボタンの画像" alt="Google+でシェア"></a>
[/html]
はてなブックマーク
[html]
<a href="http://b.hatena.ne.jp/entry/[シェアしたいURL]" class="hatena-bookmark-button" data-hatena-bookmark-layout="simple" title="[ページタイトル]"><img src="オリジナルSNSボタンの画像" alt="はてなブックマークに追加" /></a>
<script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
[/html]
LINE
[html]
<a href="http://line.me/R/msg/text/?[ページタイトル][シェアしたいURL]" target="_blank"><img src="オリジナルSNSボタンの画像" alt="LINEでシェア"></a>
[/html]
シェア数取得〜ボタン設置までの流れ
さーて、今までやったことを一連の流れでお伝えします。
やってることは単純で、PHPでシェア数を取得→各SNSボタンを設置→フキダシ部分でシェア数を受け取って表示…といった具合です。
[php]
<?php
//---------ページのURL・ページタイトルを変数に格納---------
$url='シェア数を取得したいページのURL';
$title='ページタイトル';
// ---------SNSシェア数を取得---------
// Twitter
$json = @file_get_contents('http://urls.api.twitter.com/1/urls/count.json?url=' . $url . '');
$array = json_decode($json,true);
$twitter_count = $array['count'];
// Facebook
$json = @file_get_contents('http://graph.facebook.com/?id=' . $url . '');
$array = json_decode($json,true);
if(!isset($array['shares'])){
$count = 0;
}else{
$count = $array['shares'];
}
$facebook_count = $count;
// Google+
$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 );
$obj = json_decode( $result, true );
if(!isset($obj[0]['result']['metadata']['globalCounts']['count'])){
$count = 0;
}else{
$count = $obj[0]['result']['metadata']['globalCounts']['count'];
}
$gplus_count = $count;
// hatena
$count = @file_get_contents('http://api.b.st-hatena.com/entry.count?url=' . $url . '');
if(!isset($count) || !$count){
$count = 0;
}
$hatena_count = $count;
print <<< html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="share">
<ul>
<li class="twitter">
<div class="arrowBox">
<span>{$twitter_count}</span>
</div>
<a href="http://twitter.com/share?url={$url}&text={$title}" target="_blank"><img src="オリジナルSNSボタンの画像" alt="Twitterでシェア"></a>
</li>
<li class="facebook">
<div class="arrowBox">
<span>{$facebook_count}</span>
</div>
<a href="http://www.facebook.com/share.php?u={$url}" onclick="window.open(this.href, 'FBwindow', 'width=650, height=450, menubar=no, toolbar=no, scrollbars=yes'); return false;"><img src="オリジナルSNSボタンの画像" alt="Facebookでシェア"></a>
</li>
<li class="gplus">
<div class="arrowBox">
<span>{$gplus_count}</span>
</div>
<a href="https://plus.google.com/share?url={$url}" onclick="window.open(this.href, 'Gwindow', 'width=650, height=450, menubar=no, toolbar=no, scrollbars=yes'); return false;"><img src="オリジナルSNSボタンの画像" alt="Google+でシェア"></a>
</li>
<li class="hatena">
<div class="arrowBox">
<span>{$hatena_count}</span>
</div>
<a href="http://b.hatena.ne.jp/entry/{$url}" class="hatena-bookmark-button" data-hatena-bookmark-layout="simple" title="{$title}"><img src="オリジナルSNSボタンの画像" alt="はてなブックマークに追加" /></a>
<script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
</li>
<li class="line">
<a href="http://line.me/R/msg/text/?{$title}{$url}" target="_blank"><img src="オリジナルSNSボタンの画像" alt="LINEでシェア"></a>
</li>
</ul>
</div>
</body>
</html>
html;
?>
[/php]
このコードを使って作ったサンプルがこちら!
サンプル
おまけ:cssでフキダシの作り方
シェア数を表示させる部分のフキダシをcssで作る時はこちらのジェネレータにお世話になってます!めちゃめちゃ便利!これで下向きのフキダシを作ります〜!
![cssでフキダシを作るジェネレータ「cssarrowplease」]()
サンプルページで使ったcssは以下のようになっています。
![cssでフキダシを作る]()
[css]
.arrowBox {
position: relative;
background: #ffffff;
border: 1px solid #cccccc;
border-radius: 3px;
text-align: center;
}
.arrowBox:after, .arrowBox:before {
top: 100%;
left: 50%;
border: solid transparent;
content: " ";
height: 0;
width: 0;
position: absolute;
pointer-events: none;
}
.arrowBox:after {
border-color: rgba(255, 255, 255, 0);
border-top-color: #ffffff;
border-width: 5px;
margin-left: -5px;
}
.arrowBox:before {
border-color: rgba(204, 204, 204, 0);
border-top-color: #cccccc;
border-width: 6px;
margin-left: -6px;
}
[/css]
サンプル
さいごに
いかがでしたか?こんな記事を書いていますが、以前の自分は「SNSボタンは公式のボタンが一番いい」と思ってたんですよね。公式のボタンが一番広く認知されているだろうし、ヘタにオリジナルのボタンにしたら、逆に押してもらえなくなってしまうんじゃないかって。自分がビビリなので、よくわからないボタンを押そうという気にはあんまりなれないんです。
ですが、最近はもうSNSでシェアするという行動が世間的に根付いてきて、「シェアボタン」自体の認知度もかなり高いと思うので、公式のものよりデザインにマッチしたオリジナルのボタンのほうが好まれることもありそうですよね。なんといっても表示速度が速いし。
とはいえ、まだ自分のサイトをオリジナルのSNSボタンに変更できていない状態なのですが、そういった変化にも徐々に対応していきたいと思います。以上、彩がお伝えしましたー!