曲サーチ
Yahoo!Pipes経由でYQLを使ってアーティスト検索後
曲リストを使ってYoutubeで検索します。
下のコードの検索キーワードを変更すれば、表示する写真が変わります。
※ 日本語非対応 YQLを使っているため
※白い枠内の検索ワードで検索しているためにリンク先がまったく違っているものかも知れないです。
一応スターの点数でソートして一番点数の高いものをリンクに貼り付けてはいますが・・・。
履歴
@teageek
2009/07/18 検索ができるようにした。 YQLのデータベースは曲リストがショボイw ぶっちゃけYoutubeで素直にアーティスト検索したほうが豊富だw
2009/07/16 表示を変更 原型がどこに行ったやら。
2009/07/15 YahooPipesを別途作ったものに変更 YQL 初fork
@keiso
2009/01/06 タイトル表示など大幅修正
2008/12/27 escape()をflash.utils.escapeMultiByte()に変更
2008/12/24 22:14 Flickrへのリンク追加
2008/12/24 17:28 URLのqueryにescape()を追加
// forked from keiso's forked from: Flickr pipes
/*
Yahoo!Pipes経由でYQLを使ってアーティスト検索後
曲リストを使ってYoutubeで検索します。
下のコードの検索キーワードを変更すれば、表示する写真が変わります。
※ 日本語非対応 YQLを使っているため
※白い枠内の検索ワードで検索しているためにリンク先がまったく違っているものかも知れないです。
一応スターの点数でソートして一番点数の高いものをリンクに貼り付けてはいますが・・・。
履歴
@teageek
2009/07/18 検索ができるようにした。 YQLのデータベースは曲リストがショボイw ぶっちゃけYoutubeで素直にアーティスト検索したほうが豊富だw
2009/07/16 表示を変更 原型がどこに行ったやら。
2009/07/15 YahooPipesを別途作ったものに変更 YQL 初fork
@keiso
2009/01/06 タイトル表示など大幅修正
2008/12/27 escape()をflash.utils.escapeMultiByte()に変更
2008/12/24 22:14 Flickrへのリンク追加
2008/12/24 17:28 URLのqueryにescape()を追加
*/
package {
import caurina.transitions.*;
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.*;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.text.TextFieldType;
import flash.utils.escapeMultiByte;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import com.flashdynamix.utils.SWFProfiler;
[SWF(width="464", height="464",backgroundColor="#000000",frameRate="30")]
public class MusicPipes extends Sprite
{
private var URL:String= new String() ;
//"http://pipes.yahooapis.com/pipes/pipe.run?_id=4c9c43965af5c0f7818f5e792b64853c&_render=rss&text=" + flash.utils.escapeMultiByte(query);
private var a:Array = [];
private var logText:TextField= new TextField();
private var labelText:TextField= new TextField();
private var data:XML;
private var loader:URLLoader;
private var imgWidth:uint = 120;
private var imgHeight:uint = 90;
private var imgOffset:uint = 2;
private var mc:MovieClip= new MovieClip();
private var xmlData:XML;
private var media:Namespace = new Namespace("http://search.yahoo.com/mrss/");
private var label:TextField= new TextField();
private var imgcount:Number=0;
public function MusicPipes()
{
//SWFProfiler.init(parent.this);
var format:TextFormat = new TextFormat();
format.color = 0x757575;
format.size = 9;
logText.defaultTextFormat = format;
logText.multiline = true;
logText.wordWrap = true;
logText.autoSize = flash.text.TextFieldAutoSize.LEFT;
logText.width = stage.stageWidth -20;
logText.height = stage.stageHeight -20;
logText.selectable=false;
addChild(logText);
labelText.htmlText="<b>アーティスト名を入力して検索できます。(英語only,入力後Enter)";
labelText.background=true;
labelText.multiline=true;
labelText.height=20;
labelText.width=464;
labelText.selectable=false;
addChild(labelText);
label.width=this.width
label.y=labelText.height;
label.height=20;
label.text="Maroon 5";
label.background = true;
label.border = true;
label.type = TextFieldType.INPUT;
label.width=464;
label.addEventListener(KeyboardEvent.KEY_UP,key)
addChild(label);
search(label.text);
mc.name="mc";
addChild(mc);
}
private function search(q:String):void{
URL ="http://pipes.yahooapis.com/pipes/pipe.run?_id=4c9c43965af5c0f7818f5e792b64853c&_render=rss&text=" + flash.utils.escapeMultiByte(q);
var req:URLRequest = new URLRequest(URL);
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
req.method = "GET";
req.url = URL;
configureListeners(loader);
log("loader load:" + req.method + ";" +req.url);
try {
loader.load(req);
} catch (error:Error) {
log("Unable to load requested document.");
}
}
private function key(event:KeyboardEvent):void{
if(event.keyCode==Keyboard.ENTER){
trace("Search");
search(label.text);
}
}
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
private function completeHandler(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
log("completeHandler: " + loader.data);
xmlData = new XML(loader.data);
default xml namespace = media;
addEventListener("enterFrame", function(event:*):void{
var my:Number= stage.mouseY;
if(my<200){
if(mc.y<100)
mc.y=y+= ((200-my)/10);
}
if(my>364){
if(-mc.y<mc.height)
mc.y=y-= (10-((464-my)/10));
}
});
a=null;
a=[];
for each(var element:Object in xmlData.channel.item){
var o:Object=new Object();
o.imgurl=element.media::thumbnail.@url;
o.link= element.link;
o.title=element.title;
a.push(o);
}
var al:Number= a.length;
//Loader,TextFieldを使う分だけ生成
if(imgcount<al)
for(imgcount;imgcount<al;imgcount++){
var img:Loader= new Loader();
img.x=50;
img.y = imgHeight*imgcount+imgOffset;
img.name=""+imgcount;
mc.addChild( img );
var titleText:TextField= new TextField();
var labelFormat:TextFormat = new TextFormat();
labelFormat.color = 0x000000;
labelFormat.size = 12;
titleText.multiline = true;
titleText.width=200;
titleText.height=50;
titleText.defaultTextFormat = labelFormat;
titleText.background = true;
titleText.backgroundColor = 0xfefefe;
titleText.alpha=0.7;
titleText.name="txt"+imgcount;
titleText.text="s";
titleText.x = img.x+130;
titleText.y = img.y+20;
titleText.selectable = false;
mc.addChild(titleText);
}
//画像のロードとテキストの設定
for(var i:int=0;i<al;i++){
img= Loader(mc.getChildByName(""+i));
img.unload();
img.load(new URLRequest(a[i].imgurl));
img.addEventListener(MouseEvent.CLICK,jump);
configureListeners2(img.contentLoaderInfo);
img.visible=true;
var tx:*= TextField(mc.getChildByName("txt"+i));
tx.text=String(a[i].title).replace(/:/g,"\n");
tx.visible=true;
}
//余ったLoaderとテキストフィールドを非表示
for(al;al<imgcount;al++){
img= Loader(mc.getChildByName(""+al));
img.visible=false;
tx= TextField(mc.getChildByName("txt"+al));
tx.visible=false;
}
}
private function jump(e:Event):void{
navigateToURL(new URLRequest( a[e.target.name].link ));
}
//img Loader用
private function configureListeners2(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.COMPLETE, trace);
dispatcher.addEventListener(Event.OPEN,trace);
dispatcher.addEventListener(ProgressEvent.PROGRESS,trace);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR,trace);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, trace);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, trace);
}
private function mouseoutHandler(event:MouseEvent):void{
labelText.visible = false;
}
private function openHandler(event:Event):void {
log("openHandler: " + event);
}
private function progressHandler(event:ProgressEvent):void {
log("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}
private function securityErrorHandler(event:SecurityErrorEvent):void {
log("securityErrorHandler: " + event);
}
private function httpStatusHandler(event:HTTPStatusEvent):void {
log("httpStatusHandler: " + event);
}
private function ioErrorHandler(event:IOErrorEvent):void {
log("ioErrorHandler: " + event);
}
private function log(msg:String):void{
logText.text = msg;
}
}
}