enhydraの日記: Yahoo!メッセンジャープロトコル
何故かYahoo!メッセンジャーのプロトコル解析とPerlのクライアントライブラリを書きたくなって徹夜。参考になるサイトが幾つか有ったので比較的情報に恵まれた状態で作業が進んだ。現在のところログインとメッセージ送信までは完成し、Perlのモジュール化も済んでいる。
#!perl
use Net::YahooMessenger;
use strict;my $yahoo = Net::YahooMessenger->new;
$yahoo->id($Yahoo_id);
$yahoo->password($Password);
$yahoo->login;
$yahoo->send($recipient, $message);
__END__
とこんな感じで送信可能。これでWebと連携させたりPerl/Tk版クライアントを作ったり変なGateway作ったりと楽しめそうだ。
作成中に幾つか驚いた点がある。Yahoo!メッセンジャーはサーバとの通信を始めるために認証を済ませた後に4byteのセッションIDを付与される。以降の通信はこのセッションIDを付加してやりとりする。まぁ普通の実装だなー、と思っていたのだが、最初間違って不正なセッションIDを付加して通信をしてしまったところ、全く関係ない別のセッションと思われるメッセージの一部が端末に表示されている!
iChatがベース(今もそうなのかなぁ)であるYahoo!メッセンジャーのシステムはメッセージのルーティングを行うための共通バスをもっているのだが、おそらくこのセッションIDでルーティング先などを決定するのではないかと邪推できる。まぁ、このセッションIDを推測する方法と確実にメッセージを取得する方法はサッパリ解らないので大丈夫だろうけど。
あ、ライブラリとドキュメントは近日公開予定。っちゅーかその前に需要あるのか?
Yahoo!メッセンジャープロトコル More ログイン