forked from: forked from: flash on 2013-11-9
forked from forked from: flash on 2013-11-9 (diff: 153)
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/1KMI
*/
// 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 t:TextField = new TextField();
private var t2:TextField = new TextField();
private var scrY:int=300;
private var s1:Sprite =new Sprite();
public function FlashTest(){
loader = new TubeLoader();
loader.addEventListener(Event.COMPLETE,onComplete);
addChild(t);
t.height=300;
t.width = 400;
t.y =30;
t2.border = true;
t2.type ="input";
t2.height = 20;
t2.width = 120;
t2.x = 300;
addChild(t2);
addChild(s1);
t2.addEventListener(KeyboardEvent.KEY_UP,onKey);
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKey2);
}
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;
}
if(e.keyCode==38){
s1.y+=20;
}
}
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;
}
/*
var t3:TextField = new TextField();
addChild(t3);
t3.text = loader.names;
t3.width = t3.textWidth+5;
t3.height = t3.textHeight+5;
*/
///*
for(var i:int=listCnt;i<loader.idList.length;i++){
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";
var n:int = loader.durationList[i];
var min:int = n/60;
var sec:int = n%60;
t.text+= min.toString()+":"+sec.toString();
t.width=t.textWidth+5;
t.height=t.textHeight+5;
t.selectable=false;
t.y=lastY;
s1.addChild(t);
lastY+=t.height;
t.name = loader.idList[i].toString();
}
t = new TextField();
t.text = loader.idList.length.toString();
t.height = 20;
t.y = lastY;
s1.addChild(t);
// */
lastY+=20;
listCnt = loader.idList.length;
//t.text+="\n";
//t.scrollV = t.maxScrollV;
//t.text += loader._xml;
}
}
}
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;
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();
}
public function clear():void{
idList = new Array();
titleList = new Array();
authorList = new Array();
durationList = 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 names:String;
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();
names = new String();
for(var j:int=0;j<list3.length();j++){
names += list3[j].localName()+"\n";
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();
}
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);
}
}
//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);
}
}
//}