jaxlをつかってCGIでxmppメッセージを送信する
phpのxmppライブラリでフリーのものはいくつかあるんだけど、jaxlはNew BSD Lisenceだしイイ感じ。
jaxlのサイトに、簡単なメッセージ送信のサンプルはあるんだけど、これはcliで動かす場合のサンプル。そのままcgiで動かしてもうまく動かない、ハテ?
jaxlのサイトみたりとかググったりしてもあんまり情報ないし、うーむどうしたものか。。
なんてことやってるうちに、落としてきたソースコードにサンプルがついてることに気が付きました。
うーむ灯台下暗し。。
サンプルコードはappディレクトリ配下に格納されてます。
その中のpreFetchXMPP.phpが参考になりそう。
ヘッダに「Pre-fetch XMPP/Jabber data for webpage without using BOSH extension or Ajax requests」と書いてあります。
BOSHとかAjaxつかわないでxmppのデータを取ってきてwebページに表示するサンプルのようです。
このサンプルはvcard情報を取ってきて画面に表示していますが、vcard情報取得、画面表示の部分をメッセージ配信処理に置き換えればOK。
こんな感じ。
JAXLオブジェクト初期化の際に、modeをcliにしているのがポイントかな。
// initialize JAXL instance
$xmpp = new JAXL(array(
'user'=>'xxxxx',
'pass'=>'xxxxx',
'domain'=>'xxx.xxx.xxx.xxx',
'port'=>'5222',
'logLevel'=>4,
// Force CLI mode since this app runs from browser but we don't intend to use BOSH or Ajax
'mode'=>'cli'
));
function postConnect($payload, $xmpp) {
$xmpp->startStream();
}
function doAuth($mechanism, $xmpp) {
}
function postAuth($payload, $xmpp) {
//メッセージ配信
$xmpp->sendMessage('xxxxx@xxx.xxx.xxx.xxx', 'test data from jaxl');
$xmpp->shutdown();
}
// Register callbacks for required events
$xmpp->addPlugin('jaxl_post_connect', 'postConnect');
$xmpp->addPlugin('jaxl_get_auth_mech', 'doAuth');
$xmpp->addPlugin('jaxl_post_auth', 'postAuth');
// Fire start JAXL Core
$xmpp->startCore();