chirpstream sample 2

by uwi
SocketアクセスはFlashPolicy.xmlがないだかでerrorになるっぽい
@see http://wonderfl.net/c/3NzN
crossdomain.xmlはちゃんとある
♥0 | Line 83 | Modified 2010-07-02 12:52:28 | MIT License
play

ActionScript3 source code

/**
 * Copyright uwi ( http://wonderfl.net/user/uwi )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/X8PL
 */

// SocketアクセスはFlashPolicy.xmlがないだかでerrorになるっぽい
// @see http://wonderfl.net/c/3NzN
// crossdomain.xmlはちゃんとある
package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.net.*;
    import flash.events.*;
    import flash.system.*;
    import mx.utils.*;
    import com.bit101.components.*;
    import com.adobe.serialization.json.JSON;
    import com.adobe.serialization.json.*;
    import flash.utils.*;

    public class Test extends Sprite {
        private var _tf : TextField;
        private var _st : URLStream;

        private var _user : InputText;
        private var _pass : InputText;

        public function Test() {
            Wonderfl.disable_capture();   
            
            _tf = new TextField();
            _tf.width = 465; 
            _tf.height = 465;
            addChild(_tf);
            
            _user = new InputText(this, 350, 10, "username");
            _pass = new InputText(this, 350, 35, "password");
            var submit : PushButton = new PushButton(this, 350, 60, "Submit", onSubmit);
            var stop : PushButton = new PushButton(this, 350, 85, "Stop", onStop);
            
            init();
        }
        
        private function init() : void
        {
            _st = new URLStream();
            
            _st.addEventListener(IOErrorEvent.IO_ERROR, onError);
            _st.addEventListener(Event.OPEN, onOpen);
            _st.addEventListener(ProgressEvent.PROGRESS, onProgress);
            _st.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onError);
        }

        
        private function onSubmit(e : MouseEvent) : void
        {
            var req : URLRequest = new URLRequest("http://chirpstream.twitter.com/2b/user.json");
            req.method = "POST";
            req.data = {};
            var enc : Base64Encoder = new Base64Encoder();
//            tr(_user.text + ":" + _pass.text);
            enc.encode(_user.text + ":" + _pass.text);
            req.requestHeaders = [ new URLRequestHeader("Authorization", "Basic " + enc.toString())];
            _st.load(req);
        }

        private var _buf : String = "";

        private function onProgress(e : ProgressEvent) : void
        {
            var re : String = _st.readUTFBytes(_st.bytesAvailable);
            _buf += re;
            var sp : Array = _buf.split("\n");
            _buf = sp.pop(); // あまりは次に持ち越し
            for each(var str : String in sp){
                if(str.length == 0)continue;
                str = unescape(str.replace(/\\\u/g, "%u"));
                tr(str);
                try{
                var json : Object = JSON.decode(str);
//                tr(json != null);
                }catch(e : JSONParseError){
                    tr(e);
                }
            }
        }

        private function onOpen(e : Event) : void
        {
            tr("open", e);
        }
        
        private function onError(e : ErrorEvent) : void
        {
            tr("error", e);
        } 
        
        private function onStop(e : MouseEvent) : void
        {
            _st.close();
        }

        private function tr(...o : Array) : void
        {
            _tf.appendText(o + "\n");
            _tf.scrollV = _tf.maxScrollV;
        }
    }
}