PHP から Tiarra の Socket を使って発言する
Tiarra って、Unix ドメインソケットを叩けるんですよね。
まあそもそも普段から IRC に常駐するために Tiarra を使っているのに、携帯のために mobirc 入れたりとかしなくても、Tiarra のソケット叩ければいいんじゃね?と思い。
というかそもそも、Plagger の、IRCへの通知はいつもTiarra のソケット経由でしていて(http://search.cpan.org/~miyagawa/Plagger-0.7.17/lib/Plagger/Plugin/Notify/Tiarra.pm を使って。)、これ使えば携帯用クライアントは、普通にウェブベースでメッセージ投稿させて、これ叩くだけでOKってことにしておけば、インターフェースも簡単にできるよなーとか思ったりなんだりしてたのでした。*1
まあ要するにfsockopenしてfwriteしてるだけなんですが。Plaggerの上述のPluginのソースは参考にさせていただきました。
(てかTiarraのSocketに関してってどこかにドキュメントあるのかな?あんま熱心に探してないけどぱっと探した感じ見当たらず。。)
Tiarra の設定 (tiarra.conf)
そもそもTiarraのSocketを使うには、tiarra.confに2つ設定しなきゃいけないことがあります。
1つは、ソケット名。
# 外部プログラムからTiarraをコントロールする為のUNIXドメインソケットの名前。 # 例えば"foo"を指定した場合、ソケット/tmp/tiarra-control/fooが作られる。 # 省略された場合はこの機能を無効とする。 # また、非UNIX環境ではそもそもUNIXドメインソケットが利用可能でないため、 # そのような場合にもこの機能は無効となる。 control-socket-name: socketname
書いてある通りですが、そうすると、Tiarraの稼働中、/tmp/tiarra-control/socketname が作られる。
で、もう一つ、以下のブロックを追加。
+ System::SendMessage { }
PHP から使う
インストールはOpnepearから。
% sudo pear install openpear/Net_Socket_Tiarra
ソース
<?php require_once 'Net/Socket/Tiarra.php'; try { $tiarra = new Net_Socket_Tiarra('socketname'); // PRIVMSG // チャンネル名とテキスト。チャンネル名はtiarraの設定通りに。鯖名もつけたりなど。。 $tiarra->message('#openpear@freenode', "Hello!!"); $tiarra->noticeMessage('#openpear@freenode', "Hello!!"); } catch (Net_Socket_Tiarra_Exception $e) { echo $e->getMessage(); }
ちなみに、Tiarraのソケットは
こんなかんじでメッセージ送ればおk。
NOTIFY System::SendMessage TIARRACONTROL/1.0\r Sender: せんだー Notice: yes or no Channel: チャンネル名 Charset: utf-8とか Text: てきすと
もちろん、¥r¥n で区切りだよ。