Reserver.new(10){
Post.primary_service.update(:message => '10秒後にツイート') }
Reserver.new("2011/11/23 04:00"){
Post.primary_service.update(:message => 'もう2時か') }
と、指定した時間につぶやくようなことは簡単にできるようになります。他にもTimeを渡せば、その時間が来れば実行されます。Reserverを利用すると、いつかのよるほープラグインの例は、以下のようにかきかえられます。
とてもすっきり。最も、ピタリだったかどうかをつぶやく機能が無いのであまりこの比較は意味がないですが、いちいち自分でタイミングを合わせる必要がありません。
プラグインを書いていると、特定の時間に処理がしたい場合が出てくると思いますが、これを使えば面倒を見てもらえるので便利です。
当然、mikutterが終了してしまうとこの情報は消えてしまうので、実行されません。一年後の時間とかを設定してもまぁ無意味でしょう。
また、今の実装では、実際にブロックが実行されるたびに新しくThreadを立ち上げます。注意してください。
これからはコアでも積極的に使っていこうと思っていて、periodイベントなんかもこれを利用するようになる予定です。っていうか、periodイベントは精度も悪いし毎分実行しかできないし終わコン…?
駆け込みAPI
話はそれるけどコアでの有効利用の例。
ご存知の通り、TwitterのRest APIは1時間に350回まで使うことができます。APIにアクセスするたびに1づつ減っていって、0になるとアクセスできません。また、最初に叩いてから60分で残数が350にリセットされます。
mikutterではフォローとかリストとか、とにかくいろんなものを取ってきますが、これがなかなかAPIを食ってしまう※。しかも今後も増える予定だし(ふぁぼったツイート、ブロックしたユーザ一覧等)、APIはなかなか貴重なんです。
※ mikutterで一番RestAPI使うのはin_reply_to_statusの参照なんだけどさ
ということで、Reserverを使って、APIが回復する1分前にイベント「before_exit_api_section」を発生させるようにしてみました。プラグインはそれを受け取って、待ってましたといわんばかりにAPIを使うわけです。これで万が一APIが切れても、1分以内にまた350回使えるようになります。
今のところ使っているプラグインは、標準で添付されている list.rb くらいですね。
まとめ
- 指定した時間に実行するとかラクにできてとてもおもしろい
- つくっていうのもあれだがあんまり使う機会なさそう/(^o^)\