PDA

View Full Version : last fm api search issue (no knowledge of last fm api needed..)



omgnoseat
November 11th, 2009, 02:18 PM
hello there,

I'm working on a simple implimentation of the last fm api for a school assignment, I have a problem using a search function to search users within the last fm platform.
You can search for a user just fine, but when you want to search for another one, nothing happends. I sort of need to reset the whole search function when a new search is being done.

Here is an example of the current website (try not to mention the bugs :P)
http://stap.iam.hva.nl/~wullem01/eindopdracht/lastfmgame.html (http://stap.iam.hva.nl/%7Ewullem01/eindopdracht/lastfmgame.html)

try using the search [omgnoseat] for my account. Now try another search and youll understand my problem.
There also is a problem when the user your searching for doesnt exists, I don't know how I should cancel the search when no user is found.


import flash.external.ExternalInterface;

var pageURL:String = ExternalInterface.call('window.location.href.toStr ing');


//LAST FM
//maak een nieuwe user aan
var user:User = new User();

//maak een array aan waarin de albums worden opgeslagen
var albumArray:Array = new Array(); //array waarin de album plaatjes worden opgeslagen
var titles:Array = new Array();

var loaderWidth:Number;

var spacing:Number = 200; //spacing for the gallery
//booleans
var firstSearch:Boolean = true;
//om te kijken of de muis over een album is
var mouseOverAlbum:Boolean = false;
//kijken of het info paneel actief is
var panelActive:Boolean = false;

//last fm infos
var albums:XMLList;
var maxAlbums:Number = 20;
var ID:Number;

var infopanel:infoPanel = new infoPanel;


//laat de huidige pagina zien

sendButton.addEventListener(MouseEvent.CLICK, clickSend);


/////////////////////////////////////LAST FM////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////

function clickSend(e:MouseEvent):void{
//bij het klikken op de send button, zoek naar de gebruiker die in het textveld is ingevuld
user.getTopAlbums(searchUser.text);

pageInfo.text = "Top Albums " + searchUser.text;

//wanneer er op de knop gedrukt is moeten de albums geladen worden
user.addEventListener(User.GET_TOP_ALBUMS, getTopAlbumsHandler);


}


function getTopAlbumsHandler(event:Event):void{

//(user.xml);
////alleen als de user bestaat een reactie geven
if(! user){
searchUser.text = "De gebruiker bestaat niet!";
}else{

//verwijder de balken op de achtergrond als ze bestaan
//if(stage.contains(balkHolder)){
//removeChild(balkHolder);
//}

albums = user.xml.topalbums.album;

//trace(albums.image.(@size=="medium").children());
//trace(albums.image);

for(var i:Number = 0; i<maxAlbums; i++){
//zoek de albums tot 10 is bereikt, creeer voor elke i een nieuwe loader voor de album art


//maak een nieuwe loader aan en laad de album plaatjes,
var albumHolder:MovieClip = new MovieClip;
albumHolder.ID = i;
albumHolder.buttonMode = true;

var albumLoader:Loader = new Loader;
var artRequest:URLRequest = new URLRequest(albums[i].image[1]);
//var artRequest:URLRequest = new URLRequest(albums[i].image.(@size=="small").children());
albumLoader.load(artRequest);


//----------------- L O C A T I O N & S I Z E --------------------------------------
//plaats de albums op een willekeurige plek op de stage
albumHolder.x = i*spacing;
albumHolder.y = stage.stageHeight/2;
loaderWidth = albumHolder.width;//width of the loader, needed for boundaries

//------------- A P E A R E N C E --------------------------------

var albumShadow = new DropShadowFilter(1, 90, 0x000000, 0.5, 4, 4);
albumHolder.filters = [albumShadow];


//tekst onder de iconen
var albumText:TextField = new TextField;
//toon de ranking, artiest en het album
albumText.htmlText = "rank: " + albums[i].@rank + "\n" + albums[i].name + "\n" + albums[i].artist.name ;
albumText.selectable = false;
albumText.wordWrap = true;
//albumText.width = albumLoader.width*1.5;

var txtFormat:TextFormat = new TextFormat();
txtFormat.align = "center";
txtFormat.font = "Arial"
txtFormat.size = 12;
albumText.setTextFormat(txtFormat);


//----------------------------------------------------------------

//zet de albums in een array
albumArray.push(albumHolder);
addChild(albumHolder);
albumHolder.addChild(albumLoader);

//maak de iconen goede hoogte
Tweener.addTween(albumHolder, { time: 1, width: 75, height:75, transition:"easeOutElastic"});

albumLoader.mouseEnabled = false;
albumLoader.mouseChildren = false;

//zet de titles in een array
titles.push(albumText);
addChild(albumText);

//set de albums achter het menu
setChildIndex(albumHolder,numChildren - 2);

//maak elk item in de loop clickbaar

addEventListener(Event.ENTER_FRAME, hitAlbum);
//albumHolder.addEventListener(MouseEvent.CLICK, clickAlbum);

//einde van checken op eerste search
}
}//end of loop
}//end of function

addEventListener(Event.ENTER_FRAME, moveAlbums);
addEventListener(MouseEvent.MOUSE_OVER, overAlbum);
addEventListener(MouseEvent.MOUSE_OUT, outAlbum);

}



function resize():void{
for(var i:Number = 0; i<maxAlbums; i++){
Tweener.addTween(albumArray[i], {width:80, height:80, time: 2, transition:"easOutElastic"});

}
}

function overAlbum(e:MouseEvent):void{
mouseOverAlbum = true;
//for(var i:Number = 0; i<maxAlbums; i++){
//Tweener.addTween(e.target, {width:100, height:100, time: 2, transition:"easOutElastic"});
//}
}

function outAlbum(e:MouseEvent):void{
mouseOverAlbum = false;
//for(var i:Number = 0; i<maxAlbums; i++){
//Tweener.addTween(e.target, {width:80, height:80, time: 2, transition:"easOutElastic"});
//}
}

//function moveAlbums(e:MouseEvent):void{
//kijken of het paneel al actief is
//if(panelActive == true){
//infopanel.alpha = 0;

//}else{

//toon het info paneel en de informatie op basis van het movieclip ID;

/*infopanel.x = (stage.stageWidth * 0.5) //- infopanel.width/2;
infopanel.y = (stage.stageHeight * 0.5) + infopanel.height/2;
infopanel.scaleX = 0.8;
infopanel.scaleY = 0.8;
var panelShadow = new DropShadowFilter(1, 90, 0x000000, 0.5, 4, 4);
infopanel.filters = [panelShadow];
infopanel.alpha = 0;

//toon de text van het gekozen plaatje
infopanel.artistInfo.htmlText = "<b>Artiest: </b>" + albums[e.target.ID].artist.name;
infopanel.albumInfo.htmlText = "<b>Album: </b>" + albums[e.target.ID].name;
infopanel.rankInfo.htmlText = "<b>Rank: </b>" + albums[e.target.ID].@rank;
infopanel.playcountInfo.htmlText = "<b>Playcount: </b>" + albums[e.target.ID].playcount;
infopanel.albumArt.source = albums[e.target.ID].image[1];

addChild(infopanel);

//tween the panel
Tweener.addTween(infopanel, { time: 1.5,alpha:1, scaleX:1, scaleY:1, transition:"easeOutElastic"});

//panelActive = true;
removeEventListener(MouseEvent.CLICK, clickAlbum);
infopanel.exitButton.addEventListener(MouseEvent.C LICK, clickExit);
//de iconen moeten niet meer scrollen;
//removeEventListener(Event.ENTER_FRAME, perspectiveMouse);*/


//}//end of else

//}

function clickExit(e:MouseEvent):void{

Tweener.addTween(infopanel, { time: 1,alpha:0, scaleX: 0.8, scaleY: 0.8, transition:"easeInElastic", onComplete:inActive});
}

function inActive():void{

removeChild(infopanel);
panelActive = false;
infopanel.exitButton.removeEventListener(MouseEven t.CLICK, clickExit);

//addEventListener(MouseEvent.CLICK, clickAlbum);
}








function moveAlbums(e:Event):void{

var maxRight:Number = (loaderWidth+spacing)*maxAlbums;
//de maximale rechtse locatie is de breedte van het icoon+de spacing keer het aantal plaatjes, wanneer een icoon op die locatie komt, zal het aan de andere kant van het scherm komen
var maxLeft:Number = (loaderWidth+spacing)*-maxAlbums;


//een loop omdat elk album icoon individueel aangesproken moet worden door de array
for (var i:Number = 0; i<maxAlbums; i++){


//---------------------T I T L E S -------------------------

titles[i].x = albumArray[i].x - albumArray[i].width/3;
titles[i].y = albumArray[i].y - albumArray[i].height*1;
//Z AXIS
//titles[i].z = albumArray[i].z;// + albumArray[i].height;

//100/2 = 50, maar 100/5 = 20, dus hoe kleiner de width, hoe hoger de snelheid


// ---------------------BOUNDARIES & SPEED ------------------------

//albumArray[i].x += mouseDistance/speed;
var characterDistance:Number = character.x - (stage.stageWidth/2);
albumArray[i].x -= characterDistance/speed;


if((albumArray[i].x + albumArray[i].width) < maxLeft ){
albumArray[i].x = stage.stageWidth + albumArray[i].width;}

if((albumArray[i].x - albumArray[i].width) > maxRight ){
albumArray[i].x = 0 - albumArray[i].width}


}//end of loop

}//end of function



function hitAlbum(e:Event):void{

for (var i:Number = 0; i<maxAlbums; i++){

if(character.hitTestObject(albumArray[i]) && falling){

//only if the panel isnt already active
//hittest returned true, trace dus het id waar albumarray true is
//trace(albumArray[i].ID);

//play the sound if isn't already playing
if(soundPlaying == false){
sfxSoundChannel = blockSound.play(0, 0);
soundPlaying = true;
}

//block the character from going trough
dy = +5;

if(panelActive == false){
//show info panel
panelActive = true;

infopanel.x = (stage.stageWidth * 0.5) //- infopanel.width/2;
infopanel.y = 0 + infopanel.height*0.75;
infopanel.scaleX = 0.8;
infopanel.scaleY = 0.8;
var panelShadow = new DropShadowFilter(1, 90, 0x000000, 0.5, 4, 4);
infopanel.filters = [panelShadow];
infopanel.alpha = 0;

//toon de text van het gekozen plaatje
infopanel.artistInfo.htmlText = "<b>Artiest: </b>" + albums[albumArray[i].ID].artist.name;
infopanel.albumInfo.htmlText = "<b>Album: </b>" + albums[albumArray[i].ID].name;
infopanel.rankInfo.htmlText = "<b>Rank: </b>" + albums[albumArray[i].ID].@rank;
infopanel.playcountInfo.htmlText = "<b>Playcount: </b>" + albums[albumArray[i].ID].playcount;
infopanel.albumArt.source = albums[albumArray[i].ID].image[1];

addChild(infopanel);

//tween the panel
Tweener.addTween(infopanel, { time: 1.5,alpha:1, scaleX:1, scaleY:1, transition:"easeOutElastic"});

//panelActive = true;
//removeEventListener(MouseEvent.CLICK, clickAlbum);
infopanel.exitButton.addEventListener(MouseEvent.C LICK, clickExit);

}else{//if the panel is already active
//toon de text van het gekozen plaatje
infopanel.artistInfo.htmlText = "<b>Artiest: </b>" + albums[albumArray[i].ID].artist.name;
infopanel.albumInfo.htmlText = "<b>Album: </b>" + albums[albumArray[i].ID].name;
infopanel.rankInfo.htmlText = "<b>Rank: </b>" + albums[albumArray[i].ID].@rank;
infopanel.playcountInfo.htmlText = "<b>Playcount: </b>" + albums[albumArray[i].ID].playcount;
infopanel.albumArt.source = albums[albumArray[i].ID].image[1];

}
//end of info panel check
}//end of if

}//end of loop
}
/*
function clickSendAgain(e:MouseEvent):void{
var refreshPage:URLRequest = new URLRequest(pageURL);
navigateToURL(refreshPage, "_blank");

removeEventListener(Event.ENTER_FRAME, moveAlbums);
removeEventListener(MouseEvent.MOUSE_OVER, overAlbum);
removeEventListener(MouseEvent.MOUSE_OUT, outAlbum);
removeEventListener(Event.ENTER_FRAME, hitAlbum);
sendButton.removeEventListener(MouseEvent.CLICK, clickSendAgain);

for(var i:Number = 0; i<maxAlbums; i++){
removeChild(albumArray[i]);
removeChild(titles[i]);

}

albumArray = [];
sendButton.addEventListener(MouseEvent.CLICK, clickSend);
}





any help would greatly be appreciated, I need to finish this in 2 days haha.
Thanks in advance