cakePHPのshellからPEARを使おうとしてハマった

http://copo.jp/mizu/?p=98
この方法で、cakePHPのコントローラからPEARを使えたので、shellでも使えるかと思ったらダメだった話。
cakePHPのバージョンは1.3.9、PHPのバージョンは5.2.17。


cakePHPでshellの動かし方は、コチラを参照。
CakePHP 1.2 シェル機能でバッチ処理やコマンドをサーバー側で実行する - Web Tech Log by 1KB


app/vendors/shells に test.php 作って、

<?php
App::import('pear', 'Consumer', array('file' => 'HTTP/OAuth/Consumer.php'));

こう書いて実行すると、

%./cake.php test2 0 0 -app /home/username/app

Warning: require_once(HTTP/OAuth.php): failed to open stream: No such file or directory in /home/hsksyusk/pear/PEAR/HTTP/OAuth/Consumer.php on line 24

Fatal error: require_once(): Failed opening required 'HTTP/OAuth.php' (include_path='.:/usr/local/php/5.2.17/lib/php') in /home/hsksyusk/pear/PEAR/HTTP/OAuth/Consumer.php on line 24
%

HTTP/OAuth.phpはHTTP/OAuth/Consumer.phpの親みたいなものだと思われるので、たぶん直接呼んだphpは読めるけど、その先にあるphpは読めないっぽい。
ためしに他のパッケージでもやってみたら、依存パッケージがことごとく読めずに同じエラーを吐いてた。


bootstrapの設定がpearの中では効いてないってことだろうか。


とりあえず、別な方法でPEARを使うことで回避した。
cakephpでPEARライブラリを利用する。 | php-tips.com
この方法でやれば、shellの中でも問題なく動いた。んー。

twitter botに1分間に1回ペースで290回つぶやかせてみた

  • twitter APIに使用制限がある
  • 発言系の制限回数はファジーに運用されている

なので、それを避けてbotを作るにはどうしたらいいんだと思って、とりあえず動かしてみた記録。

テスト内容

  • 1分間に1回、タイムスタンプを含んだ内容を発言させた。
  • 合計で290回トライ。
  • 新規アカウントを使用、開始30分前に8回つぶやいてるだけの状態からスタート。

結果

  • 1〜119回目:成功(04:22:02〜06:21:50)
  • 120〜148回目:失敗(06:22:51〜06:51:10)
  • 149〜275回目:成功(06:52:11〜09:00:01)
  • 276〜290回目:失敗(09:01:02〜09:15:12)

時間はその間の最初のツイートと最後のツイートの時間で、UTC標準時。
失敗時のエラーメッセージはすべて、

User is over daily status update limit.

だった。


制限かかる回数も制限解除される時間もあんまりはっきりはわからなかったけど、この回数とこのペースが多すぎるっていうのはわかった。
今作ろうとしてるのが、たくさんつぶやく必要のあるbotなので、100回未満で5分に1回ペースくらいにしようかなー。