若干(というかわりかし無理矢理)ですけども無事、Google+の+1されたカウント数を取得できました。
Google+はカウント数を取得するAPIが公式で提供されてないのでぼくはおこですよ全く。
さて。
最初に試したこと
そりゃまぁGoogleで検索しますよね。
検索すると非公式ながらも取得方法がありました。↓ via http://papermashup.com
<?php /** * Show Google Plus’s – PHP function * via http://papermashup.com/google-plus-php-function/ * * @param $url * * @return array|mixed */ function gplus_shares( $url ) { // G+ DATA $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 ); return json_decode( $result, true ); } ?>
使ってみるよね
これを使ってカウント数を取得するとですね、ええと、
<?php // 関数にURLを投げてJSON取得 $gplus = gplus_shares( 'http://hayashikejinan.com' ); // ぼくのブログURLで試してみます // カウント数だけ出力 echo $gplus[0]['result']['metadata']['globalCounts']['count']; ?> <!-- JSONごと出力 --> <pre><?php print_r( $gplus ); ?></pre>
こんな感じで返って来ます。
「ちゃんと取得できてるんだからいいじゃん!」
と思いきや、使ってるAPIキーが謎。ほんと謎。
自分のGoogle+APIキーだとダメ。何のキーよ AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ って…
さすがにちょっと気持ち悪いので他の方法を試す。(curl 使えないサーバーもあるっぽいよね!
公式の+1ボタンからカウント数だけ取得したらよくない?
という誰でも思いつくことをしましたよ。
公式ボタンのスクリプトはGoogle+の諸機能を呼ぶやつなので、+1ボタンだけが欲しい。
それっぽいのを探してみる。お、これは怪しい。
スクリプトURLをコピーして、不要っぽいのを省いて呼んでみたら押せないただのボタンだけが表示された!いえす!
<?php $url = 'http://hayashikejinan.com'; $gplus = file_get_contents( 'https://apis.google.com/_/+1/fastbutton?url=' . urlencode( $url ) ); echo $gplus; ?>
取得した内容はちょっと長いから割愛して、カウント数書かれてるところを探す。発見。
ld:[,[2,【カウント数】,[
常にこういう形で出てくる、同じ記述はない、つまり!正規表現でカウント数だけ頂ける!
ちょっと横道にそれて正規表現
phpで正規表現使って文字列抽出する関数は preg_match 。
というわけでGoogle+のカウント数を取得するまとめ
ここまでだらだら書きましたけども、取得は数行でできました。今回はphpで jQueryとかわかんない 。
注意点は1つだけ、呼ぶスクリプトが https なので opensslモジュール 対応のサーバーが条件です!
phpinfo で確認しときましょう。
ローカルなら php.ini で extension=php_openssl.dll を解き放てばおっけーです
phpinfoとかわかんないひとは↓これを書いてみればいいよ!
<?php // openssl モジュール確認 if ( ! extension_loaded( 'openssl' ) ) { throw new Exception( 'openssl 拡張モジュールが有効になっていません。' ); } else { echo 'openssl 拡張モジュールが有効です'; } ?>
Google+のカウント数を取得するサンプルコード
<?php /** * Google+ のカウント数だけを取得する関数 * * @param $url * * @return mixed */ function getGooglePlusCount( $url ) { $plus = file_get_contents( 'https://apis.google.com/_/+1/fastbutton?url=' . urlencode( $url ) ); // 正規表現でカウント数のところだけを抽出 preg_match( '/\[2,([0-9.]+),\[/', $plus, $count ); return $count[1]; } // 出力 echo getGooglePlusCount("http://hayashikejinan.com"); ?>
こんな感じですね。長かった…
ホホまとめ
正直、curl使ったコードでええやん、という感想もあったり。
ただまぁ今回やった方法が安心なのは間違いないんじゃないでしょうか。
そもそもGoogleさんがちゃんとAPIを提供してくれればいいんですよまったく。
いろいろやってみると勉強になっていいっちゃいいですね。
追記:
curl使っての取得100回平均取得時間が20秒
ぼくの書いたコードで取得100回平均取得時間が30秒
でした。