Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer variables d'un fichier XML

    29 novembre 2010 à 21:51:06

    Salut à tous, je possède une WebRadio et je souhaiterais y récupérer quelques informations et en direct si possible (pas besoin d'actualiser la page).
    Voici les deux liens contenant les informations :
    - http://api.radionomy.com/currentsong.c [...] b2de&type=xml

    J'ai récupéré un script qui permet de récupérer la musique actuelle, et qui s'actualise toutes les x secondes.
    J'ai fait un test en local avec un fichier "variables.xml" et ça fonctionne niquel (le fichier varaibles.xml contient le code source de la page ce-dessus), mais si jamais je met "variables.html" ça ne fonctionne plus, là je me dit "abusé...". Mais ce n'est pas grave, tant pis. Donc je continue et je colle mon lien (puisque c'est le but tout de même), et là ça ne fonctionne pas du tout, pourquoi ?
    Je pense que ça vient que la fin de mon url n'est pas en ".xml" mais je ne suis pas sûr.

    Quelqu'un peut-il m'aider ?
    Merci d'avance.

    <script type="text/javascript">
    /* Cet algorithme permet de récupérer des valeurs contenu dans un document XML toutes les deux secondes
    sans passer par un rafraîchissement de la page.
    Il n'y a aucun scintillement pour Internet Explorer (IE). Mozilla a un petit clignotement 
    mais cela reste raisonnable.
    */
    
    //déclaration de la variable qui va contenir les données xml
    var tracksxml
    
    //fonction qui charge le document XML à partir d'un objet activeX pour IE et implementation pour Mozilla
    	function loadXML()
    		{
    
    // pour que la fonction soit relancée toutes les deux secondes, récursivité avec la fonction setTimeout
    		setTimeout('loadXML()',2000);
    
    		//chargement du fichier XML pour Internet Explorer
    		if (window.ActiveXObject)
    			{
    			tracksxml = new ActiveXObject("Microsoft.XMLDOM");
    
    			// mode synchrone obligatoire pour obtenir l'ensemble de la réponse
    			tracksxml.async=false;
    
    			//chargement du fichier xml en question
    			tracksxml.load("variables.xml");
    
    			// lancement de la fonction getmessage() voir plus bas
    			getmessage()
    			}
    
    		// code pour Mozilla
    else if (document.implementation && document.implementation.createDocument)
    		{
    		tracksxml= document.implementation.createDocument("","",null);
    		tracksxml.load("variables.xml");
    		tracksxml.onload=getmessage
    		}
    		else
    		{
    		alert('le script n\'est pas compatible avec votre navigateur');
    		}
    }
    
    /* cette fonction affiche le contenu de la balise xml sélectionnée */
    function getmessage()
    		{
    		document.getElementById("boite1").innerHTML=tracksxml.getElementsByTagName("title")[0].firstChild.nodeValue
    		}
    </script>
    </head><body onload="loadXML()">
    <div id="boite1"></div>
    
    • Partager sur Facebook
    • Partager sur Twitter
      30 novembre 2010 à 8:55:10

      Salut,
      Tout d'abord, tu utilises mal setTimeout :

      setTimeout( loadXML, 2000 );
      


      Ensuite je te conseille d'utiliser XMLHttpRequest() plutôt que l'implémentation DOM qui est moins compatible.

      Enfin, je te conseille le format de données JSON plus adapté au traitement par javascript que XML.

      Par exemple, l'équivalent JSON de ton XML serait :

      [
      	{
      		"radioname": "RHK Champagne",
      		"track": {
      			"title": "Bumpy Ride",
      			"artists": "Mohombi",
      			"starttime": "2010-11-30T08:37:16.200Z",
      			"playduration": "220300",
      			"current": true
      		}
      	}
      ]
      


      Et c'est surtout la lecture de ce format qui est beaucoup plus simple :

      // XHR est un objet XMLHttpRequest
      // On parse la chaîne de JSON avec l'objet natif JSON
      var tracks = JSON.parse( xhr.responseText );
      // Par exemple le titre de la première chanson est accessible comme ça :
      tracks[0].title;
      // Comparée à tracksxml.getElementsByTagName("title")[0].firstChild.nodeValue,
      // le choix est vite fait 
      


      Le petit défaut, c'est que IE<=7 et quelques autres vieux navigateurs n'implémentent pas nativement l'objet natif JSON utiliser pour parser. Mais il suffit d'inclure ce script pour régler le problème.
      • Partager sur Facebook
      • Partager sur Twitter
        30 novembre 2010 à 10:02:05

        Merci LCaba de ta réponse et tes conseils, l'ennuie c'est que je ne peux utiliser que du XML car le liens que je t'ai montré et un lien donné par mon hébergeur. Faudrait-il que je convertisse le XML en format JSon ? :s
        • Partager sur Facebook
        • Partager sur Twitter
          30 novembre 2010 à 11:27:27

          Non, ça ne servirait à rien. Mais utilise XMLHtppRequest au lieu de DOM Implementation.

          Et en fait si tu remplace type=xml par type=json dans l'url donnée, tu obtient une chaîne de code javascript, qui est tout sauf du JSON. Mais tu peux l'évaluer avec eval (ce qui est un peu dangereux puisque ce n'est pas toi qui contrôles le contenu de cette chaîne).

          Je vais quand même te montrer un exemple d'utilisation de cette chaîne :

          function GetPlayInfo( oPlayInfo ){
          	alert( oPlayInfo.tracks.title );
          }
          
          // Action à exécuter à la réception des données :
          eval( xhr.responseText );
          


          Mais pour le coup, vaux mieux utiliser XML.
          • Partager sur Facebook
          • Partager sur Twitter
            30 novembre 2010 à 14:15:06

            Merci LCaba de m'avoir mis sur le piste, maintenant il faut que je mette en forme tout ça parce que JavaScript j'ai du mal ^^ Merci pour tout.
            • Partager sur Facebook
            • Partager sur Twitter

            Récupérer variables d'un fichier XML

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown