Door
Theon Ebbers
op 12-04-2014 08:26
gewijzigd op 12-04-2014 16:24
2.446 views
Heb een scriptje, welke van een opgegeven artiest en track, de albumafbeelding moet zoeken.
Als die niet niet wordt gevonden, zoekt ie een afbeelding van de artiest.
Nu krijg ik het scriptje album zoeken in een aparte php WEL aan het werk, maar in het hele script niet.
Ineens returned een var_dump dan niets meer.
Kan iemand me vertellen, wat ik hier over het hoofd zie?
<?php
$artist ='metallica';
$track = 'one';
//get artist photo
function getArtistPhoto($artist, $size) {
$xml = new SimpleXMLElement($xml);
$xml = $xml->artist;
$xml = $xml->image[$size];
$return = convert($xml);
return $return;
}
//get album cover
function getAlbum($artist, $album, $size) {
// Var_dump(xml); geeft nu niets terug, maar wanneer je dit stuk in een aparte php zet wel!!
//$artist= urlencode($artist);
// $track = urlencode($track);
$xml = "http://ws.audioscrobbler.com/2.0/?method=track.getinfo&artist=metallica&track=one&api_key=8014f5ecde02dd13d154625f46da612a";
$xml = @file_get_contents($xml);
var_dump($xml);
//-------------------------------------------------------------------------------------------
if(!$xml) {
return; // Artist lookup failed.
}
$xml = new SimpleXMLElement($xml);
$xml= $xml->track;
foreach ($xml->album as $album) {
$album_img = $album->image[$size];
$album_image = convert($album_img);
$album_name = $album->title;
//echo instead of returning
return $album_name."<br>".$album_image."<br><br>";
}
}
function convert($file){
$parts=pathinfo($file);
//dont convert if its a jpg
if($parts['extension'] == "jpg"){
return '<img src="' . $file . '" />';
} else {
Als dit je hele script is dan is $album helemaal nergens geinitieerd en zal je if statement op regel 84 dus false opleveren. Je getAlbum functie zal dus gewoon nooit worden aangeroepen...
Ondanks je het even niet meer snapt met je script, zou je even de topictitel willen aanpassen naar iets wat je vraag of probleemstelling aangeeft?
Alvast bedankt!
Heb een scriptje, welke van een opgegeven artiest en track, de albumafbeelding moet zoeken.
Als die niet niet wordt gevonden, zoekt ie een afbeelding van de artiest.
De omschrijving die je geeft klopt ook niet. Je zegt dat het script op zoek gaat als naar een afbeelding van een artiest als er geen afbeelding van een album gevonden kan worden maar het enigste dat je script doet in de if else if vanaf regel 84 is kijken of er een waarde in de variabele $album aanwezig is en daarop wordt al dan niet in de if gesprongen. Er is op dat moment nog helemaal niet geprobeerd een afbeelding in te lezen.
Begin gewoon bij het begin, vanaf de if else dus. zet daar gewoon een echo 'hij doet het!'; tussen zodat je kunt uitvinden of je script wel de lus inspringt.
Nu ik mezelf terug lees, snap ik dat ik niet helemaal duidelijk ben geweest.
Ik wilde in regel 32,33 en 34 kijken wat ik terug kreeg dmv var-dump ($xml).
Zoals ie hier staat is het resultaat NULL.
Wanneer ik diezelfde 3 regels kopieer naar een nieuw php bestandje en die uitvoer,
is het resultaat de inhoud van de xml. (waaronder de albumtitel voor $album).
Waar zit 'm dat verschil in, dat de var_dump in het script NULL returned en stand-alone
in een verder lege php wel de xml dumpt.
Misschien overbodig, maar ik script nog niet zo lang en wil eigenlijk gewoon weten waarom iets niet werkt zoals ik gedacht had, om zo de zaak beter te gaan begrijpen.
en als je dit doet, krijg je dan de melding in beeld?
<?php
//get album cover
function getAlbum($artist, $album, $size) {
echo 'De functie getAlbum() wordt nu uitgevoerd'; // <=====================
// Var_dump(xml); geeft nu niets terug, maar wanneer je dit stuk in een aparte php zet wel!!
//$artist= urlencode($artist);
// $track = urlencode($track);
$xml = "http://ws.audioscrobbler.com/2.0/?method=track.getinfo&artist=metallica&track=one&api_key=8014f5ecde02dd13d154625f46da612a";
$xml = @file_get_contents($xml);
var_dump($xml);
//-------------------------------------------------------------------------------------------
if(!$xml) {
return; // Artist lookup failed.
}
$xml = new SimpleXMLElement($xml);
$xml= $xml->track;
foreach ($xml->album as $album) {
$album_img = $album->image[$size];
$album_image = convert($album_img);
$album_name = $album->title;
//echo instead of returning
return $album_name."<br>".$album_image."<br><br>";
}
Dus had Erwin gelijk. $album krijgt nergens een waarde dus wordt er niet in de lus gesprongen en dus wordt de functie getAlbum helemaal niet aangeroepen.
m.a.w. de functie aanroep op regel 88 wordt niet uitgevoerd omdat er niet aan de voorwaarden van de if op regel 84 voldaan wordt.
Maar nog steeds gaat er iets fout bij controle van var_dump.
In regel 9 en 28 krijg ik WEL een var_dump($xml),
Bij regel 52 en 71 NIET.
Ik denk dan: "geen 'vars' = niets om überhaupt nog iets mee te doen".
Kun je aanroepen wat je wil, als het niet bestaat kan ie er ook niets mee doen!
Of zie ik dat verkeerd.
Krijg nu wel ALLE albumcovers.....
<?php
//get artist photo
function getArtistPhoto($artist, $size) {
$artist = urlencode($artist);
$xml = "http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist={$artist}&api_key=8014f5ecde02dd13d154625f46da612a";
$xml = @file_get_contents($xml);
//var_dump ($xml); hier doet ie wel dumpen
if(!$xml) {
return; // Artist lookup failed.
}
$xml = new SimpleXMLElement($xml);
$xml = $xml->artist;
$xml = $xml->image[$size];
$return = convert($xml);
return $return;
}
//get artist albums
function getArtistAlbums($artist, $size) {
$artist = urlencode($artist);
$xml = "http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&artist={$artist}&api_key=8014f5ecde02dd13d154625f46da612a";
$xml = @file_get_contents($xml);
//var_dump ($xml); hier doet ie wel dumpen
if(!$xml) {
return; // Artist lookup failed.
}
//echo instead of returning
echo $album_name."<br>".$album_image."<br><br>";
}
}
//get Album title
function getAlbumtitle($artist, $track, $album){
$artist= urlencode($artist);
$track = urlencode($track);
$xml = "http://ws.audioscrobbler.com/2.0/?method=track.getinfo&artist={$artist}&track={$track}&api_key=8014f5ecde02dd13d154625f46da612a";
$xml = @file_get_contents($xml);
var_dump ($xml);// EN HIER NIET!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(!$xml) {
return; // Artist lookup failed.
}
$xml = new SimpleXMLElement($xml);
$album = $xml->track->album->title;
echo $album;
}
//get Album-art
function getAlbum($artist, $album, $size) {
//$album = '...and justice for all'; ( zelfs met dit zelf toevoegen, zonder te genereren)
$artist = urlencode($artist);
$album = urlencode($album);
$xml = "http://ws.audioscrobbler.com/2.0/?method=album.getinfo&artist={$artist}&album={$album}&api_key=8014f5ecde02dd13d154625f46da612a";
$xml = @file_get_contents($xml);
var_dump($xml); // EN HIER OOK NIET!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if(!$xml) {
return; // Artist lookup failed.
}
$xml = new SimpleXMLElement($xml);
$xml = $xml->album;
$xml = $xml->image[$size];
$return = convert($xml);
return $return;
}
// convert images to jpg
function convert($file){
$parts=pathinfo($file);
//dont convert if its a jpg
if($parts['extension'] == "jpg"){
return '<img src="' . $file . '" />';
} else {
En dat is dus omdat ik nog steeds gelijk heb! Omdat je $album geen waarde geeft zal het if statement op regel 130 false opleveren en dus wordt die hele functie nooit aangeroepen!
getArtistPhoto en getArtistAlbums worden aangeroepen vanuit de tweede optie van je if/else constructie, getAlbum wordt aangeroepen vanuit de eerste. Aangezien je wel een artist opgeeft, maar niet een album wordt dus de tweede optie uitgevoerd en niet de eerste.
Zooowww! Héhé, het kwartje is gevallen.
Probeerde steeds de albumtitel in een function te genereren. Die wordt, zoals al zeker 4 keer gezegd, nooit aangeroepen. Niks waard overdag werken en 's nacht scriptjes maken.
Heb nu eerst alle variabelen gedefinieerd en dan de functions laten lopen en HIJ DOET 'T.
(toch wel erg logisch eigenlijk).