blogに引っ越しました。自動投稿(Postクラス)Twitterクライアントの基本はつぶやくこととつぶやきを見ること。Post#postというエイリアスもあります。http://mikutter.hachune.net/rdoc/classes/Post.htmlでも、updateは内部ではdefine_methodを使って定義しています。RDocには載っていません。載せ方書いてあったけどうまくいかなかったこのPostオブジェクトはもともとつぶやきの投稿のためのものだったんだけど気づいたらAPIのインターフェイスになってました。friend_timelineとかも実はこのクラスを使って取得するんだけど、普通はイベントを使ってください。そのうちServiceに名前変えたいと思ってたけどそろそろ引っ込みがつかなくなってきました肝心のupdateの使い方ですが、引数はハッシュ1つで、symbolで最大3つの引数を与えられます。つぶやきの本文をStringで。リプライ先のメッセージ(in_reply_to_status)。リプライ先のユーザ(in_reply_to_user)。このユーザに宛てられる。本文に@そのユーザ名が含まれているかreplytoがセットされていれば自動的に補完される。Userのインスタンスで。あと、実際の投稿は勝手に別スレッドでやります。補足説明)を引数に取って以下のタイミングで呼び出されます。strは引数の:messageの値。messageは投稿したメッセージのMessageオブジェクト。これが渡ってきたらもうリトライしないということ。exceptionには発生した例外オブジェクトか、不正なHTTPコードが送られてきた場合はnilが渡される。後でもう一回接続を試みる(現在は1秒後に決め打ち)。以下の例は、よるほーするプラグインです。endend適当な実装だけど、だいたいこんなかんじ。時間の判定がやたら汚いけど、まあこんなふうにとっても簡単に実装できます。ちなみにbootっていうイベントは起動時に一回だけ他のイベントより先に呼ばれるイベントで、今のところはPostオブジェクトを得る一番ベターな手段です。リプライの送り方ですが、あるメッセージへの返信だったら、Message#postを使えばリプライが打てます。つぶやきの受信と送信の機能があれば、よくあるお遊びbotは実装できます。フォローしてる人限定ぼむったーなんかは簡単な正規表現だけで実装できます。がんばればおはなしbotなんかも実装できるでしょう。プラグイン作成2011年1月14日金曜日PluginTag(プラグインオブジェクト)mikutterの内部の話をするブログを作ってみた飽きたらやめる基本的にRubyを知ってる人に対して書いてます。へんなことかいてたらごめんプラグインの作成方法基本編です。mikutter.rbのあるディレクトリのplugin/以下に、なんとか.rbというファイルを作成します。すると起動時に勝手に読み込まれます。ここにrubyでゴリゴリプラグインを実装していきます。キーになるのがPluginTagクラス。実際は、Plugin.createを使ってプラグインを作るので、PluginTagという名前はあまり使わないかも。詳しくはRDocをみてね。http://mikutter.hachune.net/rdoc/classes/Plugin/PluginTag.htmlまず、騙されたと思ってPluginTagのインスタンスを得ます。Plugin.createにはプラグインのファイル名の拡張子の前をSymbolで渡してあげればいいと思います。同じシンボルを渡せば同じインスタンスを返しますが、長ったらしいので変数に退避するのが望ましいです。Plugin.create(:myplugin)endmikutterの中では、TLにつぶやきが流れてきたりするたびに「イベント」が発生します。このイベントを投げる/受けることで、プラグインはコアや別のプラグインとコミュニケーションをとってるんです。フォローしてる人がつぶやいたらupdateイベントが呼ばれ、そのイベントをlistenしているプラグインが起動されると。}endイベントをリスンするにはPluginTag#add_eventを使います。詳しい使い方はRDocにかいてあるけれど見たとおりで、updateイベントが発生するとブロックが実行されます(イベントのコールバック)。イベントごとにブロックの引数が決まっています。それも上のリンク先に書いてありますが、updateイベントの場合はPostクラスとMessageクラスの配列を引数に与えられることになっています。Messageクラスはつぶやき1件を表現するクラスなので、これだけでTLをターミナルに書き出すプラグインの出来上がりです!短い!ひとつのプラグインにいくつでもイベントをリスンさせることもできます。}endね、簡単でしょう?思いついたとおりに描いていけばいいんです。大事なことは、イベントは必ずメインスレッドで実行されるということです。mikutterはメインスレッド以外でGtkを叩いてはいけないことになっています。イベントのコールバック内ならGtk関連の操作をしてもOK。あまりにも時間のかかる処理をここでしてしまうとmikutter全体のレスポンスが悪くなりますねイベントの概念は、Twitterに例えたら、自分がPluginTagのインスタンスで、イベント(updateとか)が他人のアカウントで、add_eventとかでフォローする感じ。解りやすいかと思ったけど文字にしたら解り難かった。あれだGtkで言うところのシグナルですふつうにまとめmikutterプラグインの根幹となる概念「イベント」についてちょっと触れました。短縮URLなど一部のプラグインを除けばほとんどのプラグインがこのイベントを使っています。毎回こんな感じで書いていって、あとからマニュアルみたいに使えたらいいなってだったらちゃんとかけよおれきょうはなんかちょっと冷たいものが歯にしみたので歯をよく磨いて寝ます。