OAuth対応、cURLなしで動くphp twitter library, php-twientを公開

今年最初のリリースはphpクラスライブラリ。つっても去年つくったのをリリース用に整形しただけなんだけど・・・

特徴

  • PHP5で動く、PHP4は非サポート(動くかもしれないが基本的に対応する予定なし、むしろPHP5.3以降必須にしたいくらい)
  • cURLが無くても動く。あったらcURLを使う。
  • Basic認証とOAuthに対応(Andy Smith 氏のbasic php libraryを利用)
  • twitter APIの各メソッドは一つのcallメソッドで対応、twittterのメソッド名とarrayパラメータを渡して実行する
  • エラーは例外を発行

予定

  • まだ自分が使うメソッドしか用意してないのでゆくゆく他のメソッドに対応する
  • OAuthの部分がPHP5.3以降だとPHP Deprecatedなので修正する

余談

むかしPEARのService_Twitterとかつかってちょっと遊んだことがあったけど、なんで今更こんな後発のライブラリをつくったのか。

twitter-botをつくる機会があったんだけどPEARは使いたくなくて、http://apiwiki.twitter.com/Libraries#PHPあたりを見て試してたんだけど、なんと動かすマシンでphp-curlが入ってない。そして使いたいやつに限ってcURLが使われてる。好きにいじっていいマシンじゃないし、別にbasic認証ごときfile_get_contentsでいけるやろ。単にrequestをpostするだけやしすぐできるわ。とタカを括って書き始めてすぐできたんだけどクライアント名を表示するにはOAuthに対応しないといけないという現状を認識。

ここで使えそうなライブラリをまた探すのか、自分で書くのかいろいろ葛藤したあげく最終的に下記あたりの理由で作ることにした。

  • やっぱりみんなcURLつかってる
  • 最近Retweetなメソッドが増えるなどtwitter-apiが更新されており、追いついてないライブラリがちらほらある
  • 最近増えたtwitter-apiやOAuthをちょこっと触っておくのも良いだろう

cURLを使う、つかわない。Basic認証とOAuthでrequestクラスとauthクラスを抽象化することにした。個人的にどうもauthクラスがrequestを投げる設計が気持ちが悪くて、requestクラスにauthオブジェクトをbindするような感じにしたかったんだけど、実際書いてみたところOAuthの仕組み上、そう書きたくなることがわかった。そのためOAuthのところだけ相互参照で駄目なつくりになっている・・・ちゃんとやるならOAuthのところを2階層にわけなくちゃいけないんだけどあんまり冗長にしたくないので駄目な設計とわかりつつ妥協をしている。