このブログにもソーシャルボタンをつけているんですけど、twitter,facebook,google+と、ボタンを押された数をプレーンテキストで取得したいな~なんて思っていまして、気になっていました。
最近海外のサイトとかでよく見かけていて、どうやっているんだろうな~なんて思っていたのですが、やりかたはそんなに難しくなくて、twitter,facebook,google+とそれぞれのapiを使用してjson形式で値を取得、それを加工してプレーンテキストを取得、といった流れになります。
ただし、各SNSサービスのapiの使用回数制限っていうのがあるんで、ちょっと気をつけないとうまく取得できません。そこで、「Transients」を利用します。ちょっと例を交えて、私がやっていることをご紹介いたしますね。
Twitterを例にしてやります
twiterの場合を例としますよ。
まずは使用回数制限について、理解をした方が後々苦労せずにすむと思います。下記twitterの公式サイトを部分的に引用させていただきますね。
Twitter リミットについて (投稿、API、ダイレクトメッセージ、フォロー)
Twitterリミットがあることにより、Twitterサービスに負荷がかかりすぎないようにし、
ダウンタイムやエラーを減らすことができます。
Twitter では信頼性を維持するため、フォロー、APIリクエスト、ダイレクトメッセージ、
投稿などのアカウント毎の操作において Twitterリミットを設けています。
リミットがあると。なるほどです。
現在の、アカウント毎の技術的なリミットは以下の通りです。
ダイレクトメッセージ: 250件/1日
APIリクエスト: 150件/1時間
投稿: 1000件/1日
アカウント設定の変更: 4件/1時間
フォロー (一日): 技術的なフォローリミットは1000件/1日です。
フォロー (アカウント毎): 2000件を超えるフォローはアカウント毎の特定の基準で制限されます。
このように、twitterのサービスに負荷をかけすぎないように、制限(リミット)があるんですね。
(上記は記事公開日当時の仕様です。現在は微妙に変わってるかもですので、そこはご確認くださいませ)
apiの残り回数を確認するには・・・
こちらのURLでtwitter APIの使用回数を確認できます。
https://twitter.com/account/rate_limit_status.xml
例えば、
<remaining-hits type="integer">146</remaining-hits>
となっていれば、残り使用回数は146回/1h となります。
これは、時間が経過したら150回にリセットされます。
Twitterのツイート数をプレーンテキストで取得します
ではでは実例を・・・apiを使って、僕のtwitterアカウントのツイート数を取得します。アカウント名は「s56bouya」ですよ。
【PHPコード】
<?php function get_twitter_statuses() { $json = wp_remote_get("http://api.twitter.com/1/users/show.json?screen_name=s56bouya"); if(is_wp_error($json)) return false; $twitterdata = json_decode($json['body'], true); return intval($twitterdata['statuses_count']); } echo get_twitter_statuses(); ?>
これで僕が今までツイートした数を取得できます。上のコードは、あくまでJSONデータを取得できるだけです。
この次が重要ですよ。
ここで「Transient」を使うときが来ます
twitterのapiの使用回数は1時間に150回なので、この制限を超えるとデータが取得できなくなります。ですのでapiで取得したデータは、他のサイトの実装例を見ても、取得したデータをデータベースに一時保存(キャッシュ)しておいて、定期的に値をリフレッシュするのが主流のようです。というわけで、「Transient」を使ってコードをちょっと変更。
【PHPコード】
<?php if ( false === ( $value = get_transient( 'tweet_trans' ) ) ) { // Transient データがなかったら、twitter apiからツイート数のデータを取得して保存 $json = wp_remote_get( "http://api.twitter.com/1/users/show.json?screen_name=s56bouya" ); if( is_wp_error( $json ) ) return false; //JSON文字列をデコード $twitterdata = json_decode( $json['body'], true ); //JSON形式のデータからツイート数を取得 $value = intval( $twitterdata['statuses_count'] ); //transient にツイート数のデータを4時間保存 set_transient( $tweet_trans, $value, 60 * 60 * 4 ); } //transient 保存してあるツイート数を取得 echo get_transient('tweet_trans'); ?>
ちなみに、
http://wpdocs.sourceforge.jp/Transients_API
を参考にさせていただきました。「Transients」について詳しく書かれています。
応用するとこんなことができます
これを応用していろいろやった結果が、このブログの右上にあるやつです。
【それぞれフォロワー、ファン、+1の値を表示させました】
こういうのよく見ますよね~。増えて嬉しい、減って悲しい数字ですね・・・減ったのを見た瞬間は、なんか、あ・・・ってなります^^;
rssfeedを登録していただいている方の数も取得できるんですが、feedburnerのapiがちょっと不安定なのかな・・・うまくできないときがあるので、今回はrssfeedへのリンクをつけました。たまに読んでやってもいいぞ、という方は是非是非!(feedlyで購読をされる方はこちらをご登録お願いします!)
というわけで、twitter,facebook,google+のapiを使用する回数を制御したい方や、Transients APIの使用例(サンプル)などをお探しの方などにご参考いただければ幸いです。
このページを共有する