最近知ったんですが、Yahoo! Pipesが9月30日でサービス停止となるようです。
Yahoo Pipesを使った開発は今年の8月30日で停止となる。データの移植などのために、Pipesの仕組み自体は9月30日まで動作させるのだとのことだ。
これは困った。
というのも、自作のテーマ(Simplicity)でGoogle+とPocketのカウント取得は、Yahoo! Pipesを利用してAjaxで取得しているからです。
なぜYahoo! Pipesを利用するかというと、上記SNSサービスには、カウントを取得するためのAPIがありません。なので、普通にJavaScriptでHTMLソースを取得しようとするとクロスドメイン制約(Access-Control-Allow-Origin)によってエラーが発生します。Yahoo! Pipesは、そのエラーが発生しないように橋渡しをしてくれていました。
そのYahoo! Pipesが使えなくなるということで、ちょっと困ったことになりました。(サービス停止前に気づいたのはよかったけど)このまま放置していては、Google+とPocketだけシェアカウントが表示されないということになってしまいます。
仕方がないので、PHPで取得する関数を書きました。
ただ普通に「PHP Google+ カウント取得」で検索して出てくる方法だと、Wordpressのテーマチェッカーでチェックすると以下のような警告が出てしまいます。
今回は、こういったテーマチェッカーでエラーの出ないGoogle+カウントの取得方法の紹介です。
photo by Odyssey
目次
Google+カウントの取得方法
テーマチェッカーでエラーの出ないWordpress関数を利用して、Google+カウントを取得するには、wp_remote_get関数を利用します。
functions.phpの編集
functions.phpに書く関数は以下のようになります。
function fetch_google_plus_count($url) { $query = 'https://apis.google.com/_/+1/fastbutton?url=' . urlencode( $url ); //URL(クエリ)先の情報を取得 $result = wp_remote_get($query); // 正規表現でカウント数のところだけを抽出 preg_match( '/\[2,([0-9.]+),\[/', $result["body"], $count ); // 共有数を表示 return isset($count[1]) ? intval($count[1]) : 0; }
URL先のHTMLコードは、[“body”]に格納されているので、その取得したソースコードからカウントを部分のみを正規表現で取得しています。
wp_remote_getの使い方は、ここがわかりやすいです。
カウント表示部分の編集
あとは、Google+のカウント数(共有数)を表示したい部分に、以下のように関数の呼び出しを書くだけです。
fetch_google_plus_count('共有数を取得したいページのURL');
例えば、single.phpでカウント数を取得したければ、以下のように書きます。
<?php echo fetch_google_plus_count( get_permalink() ); ?>
コードを埋め込んだ場所に、Google+の共有数が表示されます。
まとめ
今回の方法を利用すると、テーマチェッカーでも、減点されることなく、Google+カウントを取得できます。
ただ別に、テーマチェッカーで、減点される方法でも、自分で使う分には特に問題はないと思います。
けれど「できるだけ、Wordpressの作法にのっとった(少なくともチェックツールで減点されない)書き方をしたい。」なんて場合には良いかと思います。
今回作成した関数を利用して、Ajaxでカウントを非同期取得するなんてこともできますが、その方法はまた別の記事で書きたいと思います。
追記:クロスドメイン制約を回避してAjaxでシェア数を取得する方法。
その他のAPIが利用できないソーシャルボタンのカウント取得方法は以下。