Re:

感銘高き名言は「1%のひらめきがなければ99%の努力は無駄である」(トーマス・エジソン)

タグ:Twitter

twitterのOAuthのリクエストリミットは、1時間あたり350回ですよ!

> We have increased rate limits for OAuth traffic to api.twitter.com endpoints to 350 requests per hour, more than double the current Basic Auth rate limit.

OAuth FAQより引用



ベーシック認証がクローズになるので、この手の検索が多いですね。

自分的に、Twitterというものがしっくりきてない状態でなんとなく使ってたりする日々です。

というか、ブログエントリーがただつぶやかれてる。

iPhoneにクライアント入れてたりしても、日に一度も立ち上がらないくらいです。


でも一応、タイトルにあるようなことはプログラムできた方が、時代とともに生きられる価値になると思うので、少し頭に入れておきます。


とりあえずはドキュメント


Twitterのデータを利用するシーンの方が多いと思いますし、基本的には

  1. GETリクエスト
  2. XMLなどのデータを受信

だけなので、1と2をサッと実装して、あとは煮るなり焼くなりすればいいです。


あまり難しいことを考えずとも、get_file_contents()を利用してデータが受信できます。

第一引数に取得対象のURL(APIドキュメント参照)、第三引数にstream_context_create()で作成したコンテキストを指定すれば返り値でデータが取得できます。

$xml = file_get_contents($url,false,$context);


XMLで受信(URLのフォーマットが.xml)したデータであれば、simplexml_load_string()にてオブジェクトデータにしたり、あとはPHPで好きなように処理。

$obj = simplexml_load_string($xml);

ひとつだけ。

Twitter APIは、(ほとんどのリクエストに)認証を必要としOAuth、Basic Authの2種類に対応しています。

なので、stream_context_create()に渡すオプション変数でBasic  Authすなわちベーシック認証(Basic認証)を渡すのがポイントとなっています。

セキュアに逝きたい場合はOAuthでしょうが・・・簡潔に実装するのが今の目的なので割愛(いや、知らないだけ)。そして、file_get_contents()とか使ってる時点でセキュアじゃないのかもしれない。

php.net
stream_context_create

ということで、連想配列からなる連想配列でなければならないオプションは、HTTPリクエストでGETメソッドとベーシック認証のふたつ。

$options = array(
  'http' => array(
    'method' => 'GET',
    'header' => 'Authorization: Basic '. base64_encode($username.':'.$password)
  )
);


base64_encode()でユーザ名とパスワードの符号化を。

$context = stream_context_create($options);

取得対象URLをhttp://twitter.com/account/rate_limit_status.xmlとしてデータを受信してみると、APIの利用ステータスを確認できます。

reset-time:カウントがリセットされる日時
reset-time-in-seconds:reset-timeのタイムスタンプ値
remaining-hits:残り取得回数
hourly-limit:1時間あたりの制限回数

たとえば、echo $obj->hourly-limit; // 150

制限回数は現時点で150が上限ですが、30秒に一回はリクエストできる計算なので十二分だと思います。


そんな感じ。


なお、allow_url_fopen、allow_url_include設定によりfile_get_contents()が使えない場合は、ソケットとか使ったり別な方法を試す必要があります。

バージョンが5とかだとPHP_INI_SYSTEMなので、ini_set()や.htaccessでは変更できません。

http://php.net/manual/ja/filesystem.configuration.php

↑このページのトップヘ