dabrを玄箱にインストールしたときの記録
twitterのクライアントdabrを玄箱にインストールしたときの記録です。
1.とりあえず導入
PHP5.2.0とApache2は導入済みなんでまあ簡単だろうと、適当に開始。
PHPモジュール(curl,mcrypt)をインストール。
dabrのダウンロードページからzipファイルをダウンロードしてきて展開。PHP実行用ディレクトリにコピー。
2.一応動いたが……
該当ページにアクセスしたところ、ページ表示はあっさり成功。ログインも出来た。
しかしタイムラインにツイートが1件しか表示されない。しかも最新でも無く妙に古い。
何ぞこれ?
dabrのFAQを参照すると似たような現象についての言及があった。
ツイート数が膨大な数になっててIDに割り振られる数値がPHPのint型の限界を超えてるから全部同じ数値扱いになっちゃってどうとか。
でもこれ結構前のバージョンでFIXされてるって書いてあるんだけど……。
オンラインで公開されてるdabrのサイトではちゃんと表示されてるし。
4.更に仕方が無いのでソースを見る
twitter.phpのタイムライン解析処理辺りを流し読む。
APIを使ってJSON形式で取得したデータをデコードしてる辺りが怪しい。
ということで解析結果を表示させてみたら……ちゃんと解析されてる。
でも良くみたらIDが全部同じ値(2147483647)だ。
つーかこれint型の限界値じゃないか?
json_decode 2147483647で検索してみるとjson_decodeの既知のバグで、数値を解析するときにintの限界を超えていると同じ値になるとか何とか。
PHPのバージョンをあげるとFIXされてるそうだ。
6.で、結局どうしたか
数値じゃなきゃ良いんだろ!
ってことでソースに手を入れて、json_decodeする前の文字列を加工してIDを無理やり文字列に変換するように…… こんな感じ。
$ diff -c twitter.php.org twitter.php *************** *** 290,295 **** --- 290,296 ---- { case 200: case 201: + $response = ereg_replace('"id":([0-9]+),', '"id":"\1",', $response); $json = json_decode($response); if ($json) {
こんなので良いのかとも思いますが、まあ一応動いてるんで良いかなと。