php-twientでTwitter API v1.1に対応しました

php-twientでTwitter API v1.1に対応したものをv0.5としてリリースしました。以下からダウンロードできます。

APIは過去のバージョンと互換があり、以下のように宣言をすれば最小限の書き直しで済みます。

use Twient\Twitter;
// or use Twient\Twitter\V1dot1 as Twitter;

ただし名前空間に書きなおしており、Twitter.phpだけをrequireするだけで使えた前のバージョンとは導入方法が異なります。PSR-0に準拠しているのでautoloadで使えます。composerでインストールして/vendor/autoload.phpをrequireするのがてっとり早いです。

特徴

php-twientには以下のような特徴があります。

  • 名前空間を使っているためPHP5.3以上が必要です
  • 基本的に他にライブラリは不要でphp_curlがなくても動作します。
  • composerを使ってインストールすることもできます。
{
        "repositories": [
            {
                "type": "vcs",
                "url": "https://github.com/makotokw/php-twient"
            }
        ],
        "require": {
            "makotokw/twient": "dev-master"
        }
    }
  • コード補完が使えるようにTwient\Twitter\V1dot1クラスがあります。
  • Streaming APIに対応しています
/** @var Twient\Twitter\V1dot1 $twitter */
$twitter->streamingStatusesFilter(
    array('track' => 'Sushi,Japan'),
    function ($twitter, $status) {
        static $count = 0;
        echo $status['user']['name'] . ':' . $status['text'] . PHP_EOL;
        return ($count++ < 5);
    }
);

不向き

このライブラリは以下に該当する人には向いていません。

  • PHP5.3未満の環境
  • composer?autoload?って何?つおい?

余談

もともと既存のライブラリがすべからくcurlをつかっていたため泣く泣くfile_get_contentで頑張るライブラリを書き始めたのが最初のバージョン。PSR-2や名前空間で書きなおしたり、composerに対応してみたり、そんなアグレッシブに責められるならcurlくらいセットアップできるだろ?というツッコミを受けそうだ。昨今だとVPSも流行ってきたのであまりpoorな環境に想定しなくてもいいのかなと考えがシフトしてきている。

ライブラリの設計思想としてもともとcall('/statuses/update', $params)という一つのメソッドでAPIを呼び出せるようにしていたんだけど、それを実現するためには内部でGETなのかPOSTなのかを知っていないといけなく、全てのAPIをサポートできていなかった。書き直している時にpost('/statuses/update', $params)みたいに汎用的にした方がいいのかな?とか思ったけどやっぱり使う側にたってみると間違えそうだからやりたくなかった。それを言い出すとパラメータも連想配列で渡すのではなくメソッドの引数として定義したいくらいだけど引数はいつ変わるかわからないしその度にアップデートするのもしんどい。マジックメソッドで対応することも考えたけど使う側がわかりにくすぎる。

なんでオーバーロードがねーんだよ
マジックメソッド便利だけど可読性がねーよ
なんで俺はPHP書いてんだよ(ぇ

とかいう葛藤もあってrubyでNokogiriとActiveRecord(camelizeが使いたかった)を使ってTwitterのAPIページをスクレイピングして各APIのGET/POSTを判定した上にAPIごとのPHPのメソッドを出力するスクリプトを書くという事件?が起きた。rubyのおかげ(?)でようやくphp-twientはまともに使えるバージョンになったと思う。