Ustream Flash Client API で IRC してみる


こないだのてら子では中継に初めてニコ生を使ってみたんだけど、初めてすぎて途中でいろいろめんどくなっちゃって Ustream に切り替えちゃった。お金もかかるしねー。まーでもあのコメントがだーって流れるのはそれはそれでおもしろい。で、前にもそんあことを思ったことがあって、Ustream のチャットをニコニコ風にオーバーレイして流すニコニコ Ustream ってのを作ったことがありました。(わー、2 年も前だわw。超絶おもしろかったなあ)そんときは、Ustream のプレイヤー swf から FMS とのやりとりをこっそり拝見させていただきまして、ストリームをぶっこぬいてたのですが、まー、そんな手がいつまでも使えるわけもなく、まったく動作しなくなっておりました。んで、最近 @hoehoe 氏のブログで Ustream Flash Client API とかいうのがあるのを知りまして、じゃー、また作れるやん?ってことでちょっと試したっていう話。実はてら子中に作っていた。前置き長い。

結論から言うと、すげー簡単にできた。大変だったのは API の使い方がわからんというところだ。API ドキュメントがあるんだけど無いに等しい内容でこれだったら FDT とかで SWC 見る方が早い、ってか実はそっちのが正しいみたいな。まー、↓みたいにすれば IRC つながりますので、@hoehoe 氏のやりかたで映像ひっぱってきてのっければニコニコ Ustream 完成ですなー。

package {
    import tv.ustream.irc.Channel;
    import tv.ustream.irc.Chat;
    import tv.ustream.irc.Irc;
    import tv.ustream.tools.DynamicEvent;

    import flash.display.Sprite;
    import flash.events.Event;

    public class IrcTest extends Sprite {

        private var _irc:Irc;
        private var _channel:Channel;
        private var _chat:Chat;

        public function IrcTest() {
            _irc = new Irc('username', 'password');
            _irc.addEventListener('connect', _t);
            _irc.addEventListener('connected', _t);
            _irc.addEventListener('ready', _t);
            _irc.addEventListener('motd', _onMotd);
            _irc.addEventListener('createChat', _t);
            _irc.addEventListener('createChannel', _onCreateChannel);
            _irc.addEventListener('disconnected', _t);
            _irc.addEventListener('ioError', _t);
            _irc.addEventListener('securityError', _t);
        }

        private function _t(...args):void {
            trace('******', args);
        }

        private function _onMotd(e:Event):void {
            _t(e);
            _irc.join('HogeChannel');
        }

        private function _onCreateChannel(e:DynamicEvent):void {
            _t(e);
            _channel = e.channel;
            _channel.addEventListener('message', _onMessage);
            _chat = new Chat('#HogeChannel', _irc);
            _chat.send('Uryaaaaaa!!!');
        }

        private function _onMessage(e:DynamicEvent):void {
            _t(e.from + ': ' + e.message);
        }
    }
}

この IRC クラス、Ustream だけに使えるとか制限あるわけじゃないので freenode とか別の IRC サーバーにも普通につながる。IRC クラスのコンストラクタの第 3 引数にサーバー名渡すだけ。ライセンスは確認してないけど。