クローズドな場所で運営しているモノなので、とりあえず今のところ公開はしない。
ただ技術的(?)なメモとして。あと、あわよくば知識・技術のある方からのサジェスチョンをいただくために。
とみせかけて、実は本家の公開を促すために。
ina氏がkarukiベースのチャットを作ってサークル内で動かしているんだが、これがいかんせんAjaxバリバリ(死語)なので携帯電話で見難い。ちなみにWindowsMobile6ではIEとLunascapeがJavaScript対応の問題かまったく使えず、Operaでは見られるがどう考えてもパケット飛ばしまくりでよろしくないといった状況。
さて。このチャットは、日々のログや最新50件のログ、メンバーリストなどをjsonで保持しており、UIの生成などはクライアント側がやるという特長的な設計をしている。まぁ、いわゆるMVCか。
そこで、データの取得や解析を行うgatewayをphpで作成し、クライアントでは閲覧とメッセージ入力だけを行うようなものを作った。これで携帯電話でもなんでも普通のブラウジングができれば、あえて言うなら設置場所の都合上BASIC認証が通過できれば誰でも使えるようになった。
以下、作成メモ。
このUIページは2つのphpスクリプトで動作している。
o- 最新の発言を保持するjsonファイルを取得し、展開して表示するUIスクリプト
ユーザが直接アクセスするのはこのphp。100行未満。
引数に応じてメッセージ入力フォームに初期値を入力する機能と、jsonファイルを展開する機能のみを持つ。
o- UIからの入力を「本物のチャット」鯖に転送するgatewayスクリプト
裏方。やはり100行未満。
POSTデータを生成して送りつけたのち、header関数でUIスクリプトのページへ戻す。curlを用いてBASIC認証つきのPOSTを行っている。以下抜粋。こんな感じだよ、程度で。
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
- curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
- curl_setopt($ch, CURLOPT_POST, TRUE);
- $result = curl_exec($ch);
- curl_close($ch);
- //print_r($result); // テスト出力
- header('Location: http://path/to/uiscript.php?name='.urlencode($_POST['name'])); // UIページへ遷移
_POSTFIELDSのつづりを間違えた上に、&bodyを?bodyにしちゃって時間を喰ったのは内緒だぞ!
「本物のチャット」では発言履歴部分をAjaxで取得し、また発言自体をAjaxで送っているようだが、こちらではそれができない。そのかわり手動更新のため余計なパケットは飛ばない。また、gatewayスクリプトが発言時の設定ユーザ名などを返してくれるため、UIスクリプトが解析することでUIページで入力したユーザ名などが保持される。
毎回jsonファイルをアクセスせずにキャッシュしてもいいかなぁ、とも思ったけど、多分不要だろう。
というわけで、「本物のチャット」が公開されたらこの怪しいスクリプトも公開しようと思います。とか言ってina氏に「本物のチャット」の公開を促してみる。超便利なので早く公開して欲しいんだよなー。