読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

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 で区切りだよ。

これで

PHPでなんかした結果をIRCに通知するのとかラクチンになったー。
暇があったらなんかクライアントでも書こうかなー。

ちゃんちゃん。

*1:パーミッションとかどうなるんだか調べてないけど