flash on 2014-6-27
♥0 |
Line 285 |
Modified 2014-06-27 15:49:04 |
MIT License
archived:2017-03-20 03:18:35
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/aZsu
*/
package {
import flash.display.*;
import flash.text.*;
import flash.events.*;
public class FlashTest extends Sprite {
private var pl:TubePlayer = new TubePlayer();
private var ld:TubeLoader = new TubeLoader();
private var tf:TextField = new TextField();
public function FlashTest() {
// write as3 code here..
//addChild(pl);
addChild(tf);
//tf.y = 250;
tf.text = "test";
tf.width=400;
tf.height=400;
ld.addEventListener(Event.COMPLETE,onComplete);
ld.requestWords("MMDPV");
}
private function onComplete(e:Event):void{
tf.text ="";
tf.appendText(ld.entryList.length.toString()+"\n");
for(var i:int=0;i<ld.entryList.length;i++){
tf.appendText(i.toString());
var obj:Object = ld.entryList[i];
var cnt:int = 0
for(var str:String in obj){
tf.appendText(str+":\n"+obj[str]+"\n");
cnt++;
}
tf.appendText(" "+cnt.toString()+"\n");
}
//tf.appendText("end");
tf.scrollV = tf.maxScrollV;
}
}
}
//ブックマーク登録
//id title author time
class TubeMylist{
private var so:SharedObject;
private var _obj:Object;
private var _timeline:Array;
public function TubeMylist():void{
so = SharedObject.getLocal("tubeMylist");
if(so){
//so.clear();
_obj = so.data;
}
if(!_obj.hasOwnProperty("timeLine")){
_timeline = new Array();
_obj["timeLine"]= _timeline;
}
else _timeline = _obj["timeLine"];
}
//マイリストを配列で取得
public function getIdlist():Array{
//var list:Array = new Array();
return _timeline;
}
public function getData(id:String):Object{
if(so && _obj.hasOwnProperty(id)){
return _obj[id];
}
return null;
}
public function getTitle(id:String):String{
if(_obj.hasOwnProperty(id) == true){
return _obj[id];
}
return null;
}
//マイリストへ追加
public function add(id:String,data:Object=null):void{
_obj[id] = data;
_timeline.push(id);
_obj["timeLine"] = _timeline;
}
public function remove(id:String):void{
for(var i:int=0;i<_timeline.length;i++){
if(_timeline[i]==id)_timeline.splice(i,1);
}
_obj["timeLine"] = _timeline;
if(_obj.hasOwnProperty(id) == true) delete _obj[id];
}
}
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;
public var durationList:Array;
public var entryList: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();
durationList = new Array();
entryList = new Array();
}
public function clear():void{
idList = new Array();
titleList = new Array();
authorList = new Array();
durationList = new Array();
entryList = 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 obj:Object = new Object();
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);
//obj[list3[j].localName]=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);
//obj[list3[j].localName]=id;
}
else if(list3[j].localName()=="author"){//投稿者名
var str4:String;
var list2:XMLList = list3[j].elements();
str4 = list2[0].text();
authorList.push(str4);
//obj[list3[j].localName]=str4;
}
else if(list3[j].localName()=="group"){//再生時間
var str5:String = list3[j].toXMLString();
var n2:int = str5.indexOf('duration="')+10;
var n3:int = str5.indexOf('"',n2);
var n4:int = parseInt(str5.substring(n2,n3));
durationList.push(n4);
//obj[list3[j].localName]=n4;
}//*/
else if(list3[j].localName()=="uploaded"){//再生時間
//obj[list3[j].localName]=list3[j].toXMLString();
}
obj[ list3[j].localName() ] = list3[j].toXMLString();
}//for
entryList.push(obj);
//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();
}//for
//コンプリートイベント発行
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(w:int=320,h:int=240):void{
WIDTH=w;
HEIGHT=h;
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 seekTime():Number{
return player.getCurrentTime();
}
public function set seek(time:Number):void{
player.seekTo(time);
}
public function get seekEnd():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