flash on 2012-4-20

by tepe
♥0 | Line 386 | Modified 2013-06-15 21:27:08 | MIT License
play

ActionScript3 source code

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

package {
        
    

    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.text.*;
  
    public class twit1 extends Sprite {
        private var _resultStage:Sprite = new Sprite();
        private var maxID:String;//これより古いIDを取得
        private var sinceID:String;//これより新しいIDを取得
        private var tlTop:Number = 25;
        private var tlBottom:Number;
        private var titleArea:Sprite = new Sprite();
        private var keyword:String;
        private var serchWord:TextField = new TextField();
        public function twit1():void {
            
            //背景
            titleArea.graphics.beginFill(0x39CCFF);
            titleArea.graphics.drawRect(0, 0, 165, 23);
            
            //Serchの文字
            serchWord.text = "検索:";
            serchWord.width = 33;
            serchWord.height = 18;
            serchWord.x = 2;
            serchWord.y = 2;
            serchWord.textColor = 0xFFFFFF;
            titleArea.addChild(serchWord);
            titleArea.x =300;

            //テキスト入力欄。キーボードのキーを押し上げた際にonKeyUpが実行される
            var title:TextField = new TextField();
            with(title){
                text = "wonderfl";
                width = 126;
                height = 18;
                x = 36;
                y = 2;
                border = true;
                borderColor = 0xFFFFFF;
                background = true;
                backgroundColor = 0x99DDFF;
                type = TextFieldType.INPUT;
                addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
            }
            titleArea.addChild(title);
            serchWord.addEventListener(MouseEvent.CLICK,function():void{
                if(title.text != keyword){
                    setKeyword(title.text);
                    request();
                    //serch(title.text);
                }
            });
            //検索結果を配置するSpriteをaddChild
            _resultStage.y = 25;
            addChild(_resultStage);
            
            
            addChild(titleArea);
            
            //初期状態で検索結果画面が出るように、検索を実行する。
            //serch(title.text);
            setUserID("kis");
            request();
            _resultStage.addEventListener(MouseEvent.MOUSE_OVER,addScrool);
            _resultStage.addEventListener(MouseEvent.MOUSE_OUT,removeScrool);
            
        }
        private function removeScrool(e:MouseEvent):void{
            removeEventListener(Event.ENTER_FRAME,onFrame);
            addEventListener(Event.ENTER_FRAME,stopScr);
        }

        private function addScrool(e:MouseEvent):void{
            addEventListener(Event.ENTER_FRAME,onFrame);
            
        }
        private function stopScr(e:Event):void{
            if(1<Math.abs(scrSpeed))scrSpeed/=1.001;
            else{
                scrSpeed=0;
                removeEventListener(Event.ENTER_FRAME,stopScr);
            }
            if(_resultStage.y+(scrSpeed*100)>tlTop || _resultStage.y+(scrSpeed*100)<tlBottom){
                scrSpeed/=1.1;
            }

            _resultStage.y-=scrSpeed;
            
        }

        private var scrSpeed:Number=0;
        private var requestNow:Boolean=false;
        private function onFrame(e:Event):void{
            if(mouseY < 100 && mouseY-100 < scrSpeed*10 ){
                if(tlTop > _resultStage.y)scrSpeed = (mouseY-100)/10;
                else scrSpeed=0;
            }
            else if(350 < mouseY && scrSpeed*10 < mouseY-350){
                scrSpeed = (mouseY-350)/10;
            }

            else {
                if(0.1<Math.abs(scrSpeed))scrSpeed/=1.05;
                else scrSpeed=0;
            }
            _resultStage.y-=scrSpeed;
            if(-tlBottom+600 > _resultStage.y && requestNow==false){
                moreRequest();
                requestNow=true;
            }

        }



        
        private function onKeyUp(e:KeyboardEvent):void {
            //Enterキーのキーコード13だったら、serchメソッドを実行。引数には適すと入力欄の文字列
            if (e.keyCode == 13) {
                setKeyword(e.currentTarget.text);
                request();
            }
        }
        
        
        private var requestURL:String;
        public function request():void{
            //_resultStage上のオブジェクトを全て削除
            tlBottom=0;        
            while (_resultStage.numChildren) {
                _resultStage.removeChildAt(0);
            }
            _resultStage.y = 25;
            
            var myURLLoader:URLLoader = new URLLoader();
            myURLLoader.addEventListener(Event.COMPLETE, onCompleteXML);
            myURLLoader.addEventListener(IOErrorEvent.IO_ERROR, onIoError);
            myURLLoader.load(new URLRequest(requestURL));
        }
        
        public function setKeyword(keyword:String=""):void{
            if(keyword=="")return;
            var myURLLoader:URLLoader = new URLLoader();
            var xmlURL:String = "http://search.twitter.com/search.atom?q=";
            xmlURL += encodeURIComponent(keyword);
            requestURL = xmlURL;
        }


        public function setUserID(userID:String=""):void{
            if(userID=="")return;
            //url指定
            const SEARCH_PARAMS:Object = { rpp:20 };//取得数
            var xmlURL:String = "http://search.twitter.com/search.atom?q="+"from%3A"+ userID
            for (var key:String in SEARCH_PARAMS) {
                xmlURL += "&" + key + "=" + SEARCH_PARAMS[key];
            }  
            requestURL = xmlURL;
        }
        
        //リクエスト追加
        public function moreRequest():void{        
            var myURLLoader:URLLoader = new URLLoader();
            myURLLoader.addEventListener(Event.COMPLETE, onCompleteXML);
            myURLLoader.addEventListener(IOErrorEvent.IO_ERROR, onIoError);
            myURLLoader.load(new URLRequest(requestURL + "&max_id=" + sinceID));
        }

        
        public function onIoError(e:IOErrorEvent):void {
            trace(e.type);
        }
        
        private function idNum(id:String):String{
            var reg:RegExp = new RegExp();
            reg = /:\d+/;
            var result:Object = reg.exec(id);
            var str:String = id.substring(result.index+1);  
            return str;
        }
        
        private function getHttp(str:String):String{
            var reg:RegExp = new RegExp();
            reg = /http:\/\/[\w.%&\/]+/g;
            var result:Object;
            var res2:String=new String();
            var str2:String;
            var prev:int=0;

            for(var i:int =0;i<10;i++){
                result = reg.exec(str);
                
                if(result == null)break;
                if(reg.lastIndex!=0){
                    res2+=str.substring(prev,result.index);
                    str2 = str.substring(result.index,reg.lastIndex);
                    res2+="<a href='" + str2 + "' target='_blank'>"+ '<u><font color="#0088ff">'+ str2+"</font></u>"+"</a>";
                    prev=reg.lastIndex;
                }
                else{
                    res2+=str.substring(prev,result.index);
                    str2 = str.substring(result.index);
                    res2+="<a href='" + str2 + "' target='_blank'>"+  '<u><font color="#0088ff">'+ str2+"</font></u>"+"</a>";
                    prev=str.length;
                    break;
                }
            }
            res2+=str.substring(prev);
 
            return res2;
            
        }

        private function getName(str:String=""):String{
            var reg:RegExp = new RegExp();
            reg = / (.*)/;
            var result:Object;
            var str2:String;
            result = reg.exec(str);
            str2 = str.substring(result.index+2,str.length-1);
            
            return str2;
        }
        private function getName2(str:String=""):String{
            var reg:RegExp = new RegExp();
            reg = / /;
            var result:Object;
            var str2:String;
            result = reg.exec(str);
            str2 = str.substring(0,result.index);
            
            return str2;
        }
        private function getUserID(str:String=""):String{
            var reg:RegExp = new RegExp();
            reg = /.+ /;
            var result:Object;
            var str2:String;
            result = reg.exec(str);
            str2 = str.substring(result.index,str.length-1);
            
            return str2;
        }
        
        private function removeTag(str:String=""):String{
            var reg:RegExp = new RegExp();
            reg = /#[^ $]+/g;
            var result:Object;
            var res2:String=new String();
            var str2:String;
            var prev:int=0;

            for(var i:int =0;i<10;i++){
                result = reg.exec(str);
                
                if(result == null)break;
                if(reg.lastIndex!=0){
                    res2+=str.substring(prev,result.index);
                    prev=reg.lastIndex;
                }
                else{
                    res2+=str.substring(prev,result.index);
                    prev=str.length;
                    break;
                }
            }
            res2+=str.substring(prev);
            return res2;
        }

        private function getTime(str:String):Date{
            var year:int;
            var mon:int;
            var day:int;
            var hour:int;
            var min:int;
            var sec:int;
            var reg:RegExp = new RegExp();
            reg = /\d\d\d\d-\d\d-\d\d/g;//日付 
            var res:Object= reg.exec(str);
            var str2:String = str.substring(res.index,reg.lastIndex);
            var str3:String;
            year=parseInt(str2.substring(0,4));
            mon=parseInt(str2.substring(5,7))-1;
            day=parseInt(str2.substring(8,10));
            
            var reg2:RegExp = new RegExp()
            reg2 = /\d\d:\d\d:\d\d/g;
            res = reg2.exec(str);
            str2 = str.substring(res.index,reg2.lastIndex);
            hour = parseInt(str2.substring(0,2));
            min = parseInt(str2.substring(3,5));
            sec = parseInt(str2.substring(6,8));
            var dat:Date = new Date(year,mon,day,hour,min,sec);
            //str3 = year +"-"+mon+"-"+day+" "+hour+":"+min+":"+sec;
            //str3 = str2+" "+res.index+" "+reg2.lastIndex; 
            return dat;
        }
        private function getTime2(str:String):String{
            var year:int;
            var mon:int;
            var day:int;
            var hour:int;
            var min:int;
            var sec:int;
            var reg:RegExp = new RegExp();
            reg = /\d\d\d\d-\d\d-\d\d/g;//日付 
            var res:Object= reg.exec(str);
            var str2:String = str.substring(res.index,reg.lastIndex);
            var str3:String;
            year=parseInt(str2.substring(0,4));
            mon=parseInt(str2.substring(5,7))-1;
            day=parseInt(str2.substring(8,10));
            
            var reg2:RegExp = new RegExp()
            reg2 = /\d\d:\d\d:\d\d/g;
            res = reg2.exec(str);
            str2 = str.substring(res.index,reg2.lastIndex);
            hour = parseInt(str2.substring(0,2));
            min = parseInt(str2.substring(3,5));
            sec = parseInt(str2.substring(6,8));
            var dat:Date = new Date(year,mon,day,hour,min,sec,0);
            str3 = year +"-"+mon+"-"+day+" "+hour+":"+min+":"+sec;
            //str3 = str2+" "+res.index+" "+reg2.lastIndex; 
            return str3;
        }
        
        private function tagFunc(str:String):String{
            var reg:RegExp = new RegExp();
            reg = /#[^ $]+/g;
            var result:Object;
            var res2:String=new String();
            var str2:String;
            var prev:int=0;

            for(var i:int =0;i<10;i++){
                result = reg.exec(str);
                
                if(result == null)break;
                if(reg.lastIndex!=0){
                    res2+=str.substring(prev,result.index);
                    prev=reg.lastIndex;
                }
                else{
                    res2+=str.substring(prev,result.index);
                    prev=str.length;
                    break;
                }
            }
            res2+=str.substring(prev);
            return res2;
        }



        private var dat2:Date = new Date();
        private var user:Object =new Object();
        private function onCompleteXML(e:Event):void {
            requestNow = false;
            //eventListenerを削除
            e.currentTarget.removeEventListener(Event.COMPLETE, onCompleteXML);
            
            
            //XML型にキャスト
            var myXML:XML = new XML(e.currentTarget.data);
            //namespaceを設定
            default xml namespace = new Namespace("http://www.w3.org/2005/Atom");        //*2
            
            //ヘッダーの下
            var tfY:int = tlBottom;
            //要素を取り出して、textFieldを作りならべる
            var itemLength:int = myXML.entry.length();
            maxID=myXML.max_id;
            var ID1:TextField = new TextField();
            
            

            //addChild(ID1);
            ID1.background = true;
            ID1.y = -50;
            ID1.width = 800;
            ID1.height = 400;
            for (var i:int = 0; i < itemLength; i++) {
//-----------                
                //xmlからlink,authorName,titleの各値を取得
                var ts:String = myXML.entry[i].published;
                var dat1:Date = getTime(ts);
                var idStr:String = myXML.entry[i].id;
                var id:String = idNum(idStr);
                var link:String = myXML.entry[i].link[0].@href;
                var authorName:String = getName(myXML.entry[i].author.name);
                var title:String = getHttp(myXML.entry[i].title);
                var dat3:Date = new Date(dat1.fullYear,dat1.month,dat1.date,0,0,0,0);
//------------
                //日時タグ作成
                if(dat2.time > dat3.time){
                    
                    var dTag:TextField = new TextField();
                    with(dTag){
                        width = 460;
                        x = 2;
                        Wrap = true;
                        background = true;
                        backgroundColor = 0xFFFFFF;
                        border = true;
                        borderColor = 0x39CCFF;
                        //htmlText = "";
                        autoSize = "left";
                        
                    }
                    dTag.text = String(dat3.month+1)+"/"+String(dat3.date)+"\n";
                    //テキストフィールドのy座標はtfYに加算していくことにより、決定
                    dTag.y = tfY+50;
                    tfY += dTag.height + 53;
                    _resultStage.addChild(dTag); 

                    dat2 = dat3;
                
                }

//-------------
                //idの評価
                if(maxID==null)maxID=id;
                else{
                    if( Number(maxID) < Number(id) )maxID=id;
                }
                if(sinceID==null)sinceID=id;
                else{
                    if( Number(id) < Number(sinceID) )sinceID=id;
                    
                }

//-------------
                
                //アイコン画像のURLを取得
                var imgURL:String = myXML.entry[i].link[1].@href;
                //bmpフォーマットのアイコン画像を使っている人も少なくないため、Flashで使えるファイルの拡張子かどうかを判別
                var extention:String = imgURL.substr( -4);
                extention = extention.toLowerCase();
                if (extention != ".jpg" && extention != ".gif" && extention != ".png") {
                    //Flashで使える画像の拡張子ではなかった場合にはデフォルトアイコンを指定
                    imgURL = "http://s.twimg.com/a/1254440757/images/default_profile_mini.png";
                }
                //画像のファイル名が日本語などの規定外の文字である場合を考慮しエンコードする
                imgURL = encodeURI(imgURL);        //*3
                //小さい画像で十分なので、名前を差し替える
                //imgURL = imgURL.replace(/_normal\./, "_mini\.");
                
                //得られた各値をhtmlTextに入るように整形
                var htmldata:String = "";
                //htmldata = "<a href='" + link + "' target='_blank'>";
                htmldata += "<img src='" + imgURL + "' width='48' height='48' />";
                //htmldata += "</a>";
                htmldata += "<b>" + authorName +getName2(myXML.entry[i].author.name)+ "</b> ";
                htmldata += "<b>"+dat1.toLocaleTimeString()+"\n</b> ";
                //htmldata += "<b>"+dat1.toString()+"\n" + ts+"</b> ";
                htmldata += "\n"+title ;//+ "</a>";
                //検索結果のテキストフィールド
                var tf:TextField = new TextField();
                tf.width = 460;
                tf.x = 2;
                tf.wordWrap = true;
                tf.background = true;
                tf.backgroundColor = 0xFFFFFF;
                tf.border = true;
                tf.borderColor = 0x39CCFF;
                tf.htmlText = htmldata;
                tf.autoSize = "left";
                //テキストフィールドのy座標はtfYに加算していくことにより、決定
                tf.y = tfY;
                tfY += tf.height + 3;
                _resultStage.addChild(tf);
                var s:Sprite = new Sprite();
                s.graphics.beginFill(0,0);
                s.graphics.drawRect(0,0,60,tf.height);
                s.graphics.endFill();
                s.x=tf.x;
                s.y=tf.y;
                s.buttonMode = true;
                s.name = getName2(myXML.entry[i].author.name)
                s.addEventListener(MouseEvent.CLICK,function(e:MouseEvent):void{
                    setUserID(e.currentTarget.name);
                    request(); 
                    
                });

                _resultStage.addChild(s);
            }
            tlBottom=tfY;
        }
        
        
    }
}