forked from: forked from: flash on 2013-11-9

by tepe forked from forked from: flash on 2013-11-9 (diff: 226)
♥0 | Line 406 | Modified 2013-11-23 17:31:19 | 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/2qgm
 */

// forked from tepe's forked from: flash on 2013-11-9
// forked from tepe's flash on 2013-11-9
package {
    import flash.text.*;
    import flash.display.*;
    import flash.net.*;
    import flash.events.*;
    import flash.utils.*;
    import flash.system.*;
    public class FlashTest extends Sprite {
        private var loader:TubeLoader;
        private var t3:TextField = new TextField();
        private var t2:InputBox = new InputBox();
        private var yp:TubePlayer;
        private var scrY:int=0;
        private var s1:Sprite =new Sprite();
        
        private var save:TubeMylist = new TubeMylist();
        
        public function FlashTest(){
            loader = new TubeLoader();
            loader.addEventListener(Event.COMPLETE,onComplete);
            addChild(t3);
            t3.height=300;
            t3.width = 400;
            t3.y =30;
            t3.x = 350;
            
            //t2.border = true;
            //t2.type ="input";
            t2.text = "初音ミク";
            //t2.height = 20;
            //t2.width = 120;
            t2.x = 350;
            t2.y = 20;
            t2.scaleX = t2.scaleY = 0.5;
            addChild(t2);
            addChild(s1);
            
            yp= new TubePlayer();
            yp.y=50;
            addChild(yp);            
            
            t2.addEventListener(KeyboardEvent.KEY_UP,onKey);
            stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey2);
            stage.addEventListener(MouseEvent.MOUSE_WHEEL,onWheel);
            //loadMylist();
        }
        
        private function onWheel(e:MouseEvent):void{
            var scr:int = e.delta*5;
            s1.y += scr;
            scrY += scr;
                if(scrY<200){
                    loader.requestWords(t2.text);
                }
        }

        
        private function onKey(e:KeyboardEvent):void{
            if(e.keyCode == 13){
                loader.requestWords(t2.text);
            }
        }
        private function onKey2(e:KeyboardEvent):void{
            if(e.keyCode==40){
                s1.y-=20;
                scrY-=20;
                if(scrY<200){
                    loader.requestWords(t2.text);
                }

            }
            if(e.keyCode==38){
                s1.y+=20;
                scrY+=20;
            }
            
            t3.text = scrY.toString();


        }
         
        private var lastY:int=0;
        private var listCnt:int=0;
        private function onComplete(e:Event):void{            
            //t.text = "";
            if(loader.idList.length<listCnt){
                while(0<s1.numChildren)s1.removeChildAt(0);
                lastY=0;
                listCnt=0;
                scrY=0;
                s1.y=300;
            }

            for(var i:int=listCnt;i<loader.idList.length;i++){ 
                
                var id:String = loader.idList[i].toString();
                var s:Sprite = loader.getImage(id);
                s1.addChild(s);
                s.y = lastY;
                var t:TextField = new TextField();
                //t.border=true;
                t.text+=loader.titleList[i]+"\n";
                t.text+= "投稿者:"+loader.authorList[i]+"\n";
                //t.text+=loader.idList[i].toString()+"\n";
                t.width=t.textWidth+5;
                t.height=t.textHeight+5;
                t.selectable=false;
                t.y=lastY;
                t.x=130;
                s1.addChild(t);
                lastY+=100;//t.height;
                s.addEventListener(MouseEvent.CLICK,onClick);
                s.name = id;
                s.buttonMode = true;
                
                
            }
            t = new TextField();
            t.text = loader.idList.length.toString();
            t.height = 20;
            t.y = lastY;
            s1.addChild(t);
            
            lastY+=20;
            scrY = lastY+s1.y-400;
            listCnt = loader.idList.length;
            //t.text+="\n";
            //t.scrollV = t.maxScrollV;
            //t.text += loader._xml;
        }
        
        private function loadMylist():void{
            var list:Array = save.mylist(); 
            for(var i:int=0;i<list.length;i++){
                var t:TextField = new TextField();
                t.border=true;
                t.text = list[i].toString();
                t.width=t.textWidth+5;
                t.height=t.textHeight+5;
                t.selectable=false;
                t.y=lastY;
                s1.addChild(t);
                lastY+=t.height;
                t.addEventListener(MouseEvent.CLICK,onClick);
                t.name = list[i].toString();
            }
            listCnt = s1.numChildren;

        }
        
        
        private function onClick(e:MouseEvent):void{ 
            var id:String = e.currentTarget.name;
            //var yp2:YoutubePlayer = new YoutubePlayer();
            //yp2.resize(e.currentTarget.width,e.currentTarget.height);
            //e.currentTarget.addChild(yp2);
            yp.play(id);
            //save.add(id);
        }
        

            
    }
}

//ブックマーク登録
//id title author time 
class TubeMylist{
    private var so:SharedObject;
    
    public function TubeMylist():void{
        so = SharedObject.getLocal("tubeMylist");
    }
    
    public function mylist():Array{ 
        var list:Array = new Array();
        if(so){ 
            var obj:Object = so.data;
            for(var str:String in obj){
                list.push(str);
            }
        }
        return list;
    }
        public function add(id:String,title:String=""):void{
            var obj:Object = so.data;
            var n:String="";
            if(obj.hasOwnProperty(id) == false) obj[id] = n; 
        }
        public function remove(id:String):void{ 
            var obj:Object = so.data;
            if(obj.hasOwnProperty(id) == true) obj[id] = null;
        }
}



import flash.text.*;
import flash.display.*;
import flash.net.*;
import flash.events.*;
import flash.utils.*;
import flash.system.*;
class TubeLoader extends Sprite{

        //動画ID取得
        //投稿者取得
        //動画タイトル取得
        //再生時間取得
        
        //キーワード検索
        //投稿者検索
        
        private var loader:URLLoader;
        public var idList:Array;
        public var titleList:Array;
        public var authorList:Array;
        private var _words:String = "";//前回の検索ワード
        private var cnt:int=0;//リクエスト回数
        private var _results:int = 20;
        
        public function TubeLoader() {
            idList = new Array();
            titleList = new Array();
            authorList = new Array();
        }
        
        public function clear():void{
            idList = new Array();
            titleList = new Array();
            authorList = new Array();
            cnt=0;
        }
        
        public function set results(n:int):void{
            _results = n;
            clear();
        }
        
        public function requestWords(key:String):void{            
            //var str:String = "http://gdata.youtube.com/feeds/api/videos/-/";
            var str:String = "http://gdata.youtube.com/feeds/api/videos?"
            if(_words != key){ 
                _words = key;
                clear();
            }
            str += "q="+escapeMultiByte(_words);//検索ワード
            //str += escapeMultiByte(_words)+"?";//検索ワード
            str += "&max-results="+_results.toString();//件数
            str += "&start-index="+(cnt*_results+1).toString();//インデックス
            str += "&v=2";
            //var loader:URLLoader = new URLLoader();
            
            loader = new URLLoader();
            loader.addEventListener(Event.COMPLETE,onComplete);
            var url:URLRequest = new URLRequest(str);
            loader.load(url);
            cnt++;
        }
        
        public function getImage(id:String,num:int=1):Sprite{
            var loader:Loader;
            loader = new Loader();
            //const req:String = "http://www.ozworks.dip.jp/img/01/1426006.png";
            const str1:String = "http://i.ytimg.com/vi/";
            const str3:String = "/default.jpg";
            const str4:String = "/0.jpg";
            var req2:String;
            switch(num){
                case 0:
                    req2 = str1+id+str4;
                    break;
                case 1:
                    req2 = str1+id+"/default.jpg";
                    break;
                
            }

            
            loader.load(new URLRequest(req2));//youtubeプレイヤー読み込み
            var s:Sprite = new Sprite();
            s.addChild(loader);
            return s;
        }


        
        public var _xml:String;
        private function onComplete(e:Event):void{
            loader.removeEventListener(Event.COMPLETE,onComplete);
            var res:XML = new XML(e.target.data);
            var list:XMLList = res.children();
            //var str:String = "";
            var cnt:int=0;
            
            for(var i:int=0;i<list.length();i++){
                if(list[i].localName()!="entry")continue;
                var list3:XMLList = list[i].elements();
                for(var j:int=0;j<list3.length();j++){
                    if(list3[j].localName()=="title"){ //タイトル抽出
                        //str += list3[j].text()+"\n";
                        var title:String = new String();
                        title += list3[j].text();
                        titleList.push(title);
                    }
                    else if(list3[j].localName()=="id"){ //ID抽出
                        var str3:String = list3[j].text();
                        var n:int = str3.indexOf("video:")+6;
                        //var n:int = str3.indexOf("videos/")+7;
                        var id:String = str3.substring(n);
                        //str += id+"\n";
                        idList.push(id);
                    }
                    else if(list3[j].localName()=="author"){//投稿者名
                        var str4:String;
                        var list2:XMLList = list3[j].elements();
                        str4 = list2[0].text();
                        authorList.push(str4);
                    }
                    else if(list3[j].localName()=="media:group"){
                        
                    }
                    
                }

                //str += list3.elements("id").toXMLString()+"\n\n";
                //str += i.toString()+" "+list[i].localName()+"\n";
                //str += list[i].toXMLString()+"\n\n";
                //str += "\n";
                _xml = res.toXMLString();
            }
            
            //コンプリートイベント発行
            var event:Event = new Event(Event.COMPLETE);
            this.dispatchEvent(event);
        }
    }
//}





import flash.display.*;
import flash.net.*;
import flash.system.*;
import flash.events.*;
import flash.text.*;
class TubePlayer extends Sprite{
    
    private var WIDTH:int = 320;
    private var HEIGHT:int= 240;
    private var player:Object;
    //private var players:Array;
    private var _state:int = -1;//プレイヤー状態
    private var txt:TextField;
    public function TubePlayer():void{
        var loader:Loader;
            loader = new Loader();
            Security.loadPolicyFile('http://www.youtube.com/crossdomain.xml');            
            loader.contentLoaderInfo.addEventListener(Event.INIT, onLoaderInit);
            const req:String = "http://www.youtube.com/apiplayer?enablejsapi=1&version=3";
            loader.load(new URLRequest(req));//youtubeプレイヤー読み込み
            
            txt = new TextField();
            txt.textColor = 0x00ff00;
            
    }
    
    public function resize(w:int,h:int):void{
        WIDTH = w;
        HEIGHT = h;
        if(player != null){
            player.setSize(WIDTH, HEIGHT);//サイズ
        }
    }

   
    //ローダー初期化
        private function onLoaderInit(e:Event):void{
            var loader:Loader = e.currentTarget.loader;
            loader.content.addEventListener("onReady", onPlayerReady);
            loader.content.addEventListener("onStateChange",onChangeState);
            addChild(loader);
            addChild(txt);
        }
        public function load(id:String):void{
            player.clearVideo();
            player.cueVideoById(id);//動画ID
            txt.appendText(id);
        }
        
        public function play(id:String=null):void{
            if(id!=null)load(id);
            player.playVideo();//再生
        }
        
        public function pause():void{
            player.pauseVideo();
        }
        
        public function stop():void{
            player.clearVideo();
        }

        public function get seek():Number{
            return player.getDuration();
        }
        
        public function set seek(time:Number):void{
            player.seekTo(time);
        }
        
        public function get length():Number{
            return player.getDuration();
        }
        
        public function get state():int{
            return _state;
        }




        //プレイヤー設定
        private function onPlayerReady(e:Event):void{
            player = e.currentTarget;
            player.setSize(WIDTH, HEIGHT);//サイズ
            graphics.beginFill(0x000000);
            graphics.drawRect(0,0,WIDTH,HEIGHT);
            graphics.endFill();
        }
        
        //動画ステータス変化
        private function onChangeState(e:Event):void{            
            _state = player.getPlayerState()
            txt.appendText(_state.toString()+":");
          //動画終了
            if(state == 0){   
                txt.appendText("stop");         
            }
            else if(_state == 1){
                txt.appendText("play");
            }
            else if(_state == 2){
                txt.appendText("pause");
            }
            //バッファリング中
            else if(_state == 3){
                txt.appendText("loading.....");
            }

            else if(_state == 5){//頭出し済み  
                txt.appendText("loading.....");
            }  
            txt.appendText("\n");
            txt.scrollV = txt.maxScrollV;
        }
}//class
//}//package



import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.geom.*;
import flash.text.*;

class InputBox extends Sprite {
        
    private var 
        w:int,
        h:int =  66,
        b:int =  10,
        inputBackground:Sprite = new Sprite,
        inputField:TextField = new TextField,
        labelField:TextField = new TextField;


    public function InputBox(hint:String = "search...", width:int = 380) {
        
        //var g:Graphics = graphics; g.lineStyle(0,0,0.1); g.drawCircle(0,0,10);
        
        addChild(inputBackground);
        
        w = width;
        
        inputField.defaultTextFormat = new TextFormat("Trebuchet MS", 30, 0x808080);
        inputField.htmlText = "<font color='#808080'>"+hint+"</font>";
        inputField.width = w - b*2 - (h-b*2);
        inputField.height = h - b*2;
        inputField.x = -inputField.width >>1;
        inputField.y = 4 - (inputField.height>>1);
        inputField.type = TextFieldType.INPUT;
        //inputField.embedFonts = true;
        addChild(inputField);
        
        draw();
        
        inputField.addEventListener(FocusEvent.FOCUS_IN, function (e:Event):void {
           inputField.defaultTextFormat = new TextFormat("Trebuchet MS", 30, 0x808080); 

            inputField.text="";
        });
        
        inputField.addEventListener(Event.CHANGE, function (e:Event):void {
            dispatchEvent(new Event(Event.CHANGE));
        });
        
        addEventListener(Event.ADDED_TO_STAGE, function(e:Event):void {
            //stage.addEventListener(Event.RESIZE, resize);
            //resize();
        }); 

    }
    
    
    public function get text():String {
        return inputField.text;
    }
    public function set text(str:String):void{
        inputField.text = str;
    }
    
    public function resize(wid:Number,hei:Number=66):void{ 
        w = wid;
        h = hei;
        draw();
    }


   

    
    private function draw():void {
        
        var g:Graphics = graphics;
        g.clear();
        var m:Matrix = new Matrix;
        m.createGradientBox(h,h,Math.PI/2,0,0);
        g.beginGradientFill(GradientType.LINEAR, [0xDEDEDE, 0xA5A5A5], [1,1], [0,255], m);
        g.drawRoundRect(-w>>1, -h>>1, w, h, h, h);
        g.endFill()

        g = inputBackground.graphics;
        g.clear();
        m.createGradientBox(h,h,Math.PI/2,0,0);
        g.beginFill(0xFFFFFF);
        var ww:int = w-b*2;
        var hh:int = h-b*2;
        g.drawRoundRect(-ww>>1, -hh>>1, ww, hh, hh, hh);
        g.endFill()
        inputBackground.filters = [new DropShadowFilter(4,45,0,0.4,10,10,1,2,true)];
    }    
}

Forked