IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Utiliser données JSON "Nowplaying" d'Azuracast, avec Jquery ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut Utiliser données JSON "Nowplaying" d'Azuracast, avec Jquery ?
    Helloooo !

    On a installé un serveur de flux audio sur un VPS et on voudrait récupères le nombre d'auditeurs par points de montage.

    Le serveur de flux est AzuraCast https://www.azuracast.com/
    Les APIs permettent d'obtenir divers informations, que l'on peut exploiter par exemple pour mettre sur un site.

    Nous souhaitons utiliser les données fournies dans le format suivant :
    https://demo.azuracast.com/api/nowpl...zuratest_radio

    Voici le petit code qui me permet de récupérer le nombre total d'auditeurs
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <script>
    function stats() {
      $.getJSON('https://demo.azuracast.com/api/nowplaying/azuratest_radio', (data) => {
    	 $('#counter').html(data.listeners.current);
      });
    }
    stats();
    </script>
    <span id="counter"></span>

    Mais si je veux récupérer par exemple ceux d'un mountpoint seulement , je mets :
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    	 $('#counter').html(data.mounts.0.listeners.current);
    ...
    Il ne se passe rien

    Si quelqu'un a une tite idée pour ce pauvre canard

    Merkouin

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    Bonjour,
    Il ne se passe rien
    si tu as une erreur, regarde dans la console, problème de syntaxe, il faudrait au moins écrire data.mounts[0].listeners.current mais comme mounts n'est pas une propriété de data mais de data.station, tu auras une autre erreur.

    Regarde de plus près la structure renvoyée et pour t'aider indente correctement ce que tu reçois pour pour mieux l'appréhender.

  3. #3
    Membre très actif Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    Hello,

    Merci pour cette réponse, qui a solutionné mon souci pour ce serveur là
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
        $('#counter').html(data.station.mounts[0].listeners.current);

    Du coup j’ai pu récupérer le nombre d'auditeurs pour chaque point de montage que j'ai sur ce serveur.

    En revanche, sur un autre serveur, icecast directement, je tente d'exploiter le fichier status-json.xsl qui ressemble bien au niveau structure mais je n'obtiens pas de résultat.
    Prenons par exemple http://94.23.221.158:9197/status-json.xsl
    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $.getJSON('http://91.121.59.45:8394/status-json.xsl', (data) => {
        $('#counter').html(data.icestats.source[1].listeners);
      });
    Pas de résultat affiché, mais dans la console j'ai une erreur :
    Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://91.121.59.45:8394/status-json.xsl. Raison : l’en-tête CORS « Access-Control-Allow-Origin » est manquant. [En savoir plus]
    Si je comprends bien l'explicatif de "En savoir plus", le serveur n'autoriserait pas une ressource extérieure à accéder à ces données Mais je ne comprends pas, j'arrive bien à les afficher sur mon navigateur ?

    Merki

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    Vu ce que tu as comme message d'erreur tu travailles avec un protocole file:///.
    Essaies avec un serveur local type WAMP.

    Le navigateur a des droits que tu n'as pas et lire un fichier distant, tonfichier.xsl, n'est pas la même chose que de faire une requête à une API.

  5. #5
    Membre très actif Avatar de Couin
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    Yop !

    Je n'ai pas WAMP mais par contre j’ai un (certes vieux) ubuntu avec LAMP dessus, qui me sert de serveur sur mon réseau local. Je développe directement dessus et quand ca marche, j'envoie sur le FTP pour le site chez l’hébergeur

    Pour le protocole file, je sais pas trop car le fichier json est distant (sur le serveur icecast), donc pas en local ?

    J'ai entre-temps testé autre chose, certainement un peu cavalier, c'est d'appeler via ajax, un fichier php qui récupère les données json :

    Code JS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $.ajax({
    	url: './servstats/radiart.php',
    	success: function(data){
        $('#counterradiart').html(data);
    	}	
        });

    et le fichier radiart.php :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <? $chaine = json_decode(file_get_contents("http://91.121.59.45:8394/status-json.xsl"));
    echo $chaine->icestats->source[1]->listeners; ?>

    J'obtiens le résultat souhaité, même si j'aurais préféré passer directement sans le fichier php.
    Si quelqu'un y arrive , je veux bien une piste, ne serait-ce que pour savoir si faisable ou non

    M'ciiii

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 208
    Par défaut
    J'ai entre-temps testé autre chose, certainement un peu cavalier, c'est d'appeler via ajax, un fichier php qui récupère les données json :
    Ce n'est pas tant cavalier que cela quand tu ne peux pas faire différemment et que tu ne veux pas te prendre la tête.

    Il m'est arrivé d'utiliser cela
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    header('Content-type: text/HTML; charset=UTF-8');
    if( isset($_POST["url"])){
      $url = $_POST["url"];
      $string = utf8_encode(file_get_contents($url));
      echo $string;
    }
    else
      echo "Error url";  
    ?>
    avec un appel en jQuery du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function loadCrossDomain(url) {
      $.ajax({
        url: "CORS-read.php",
        method: "POST",
        data: {
          "url": url
        },
        dataType: "json", // suivant besoin
      }).done(function (retour) {
        // du code
      }).fail(function (xhr) {
        // du code
      });
    }

Discussions similaires

  1. Utilisation de %nrstr, %quote, %str
    Par Mamouthy dans le forum Macro
    Réponses: 5
    Dernier message: 25/04/2013, 17h34
  2. Comment utiliser les données JSON dans un formpanel ?
    Par Nemesis007 dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 22/09/2010, 01h43
  3. Réponses: 0
    Dernier message: 23/05/2010, 17h09
  4. Utilisation du format $quote
    Par lhonolulu dans le forum SAS Base
    Réponses: 5
    Dernier message: 25/05/2009, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo