Utiliser l’API de Last.fm

25 mars 2015

Tutoriel pour apprendre comment utiliser l’API de Last.fm pour afficher des informations telles que le nombre d’écoutes depuis l’inscription à Last.fm ou les dernières tracks écoutées avec Php.

Cet article est très clairement inspiré de Graphikart. Je vous recommande chaudement ses tutoriels, ils m’ont été utiles à de très nombreuses reprises.

Comme vous pouvez le voir dans le footer, j’ai ajouté des informations tout à fait inutiles. Mais comme je le dis souvent, 19h47.fr est un laboratoire de test en tout genre. J’ai donc ajouté dans le footer des informations concernant ce que j’écoute en temps réel, ainsi qu’un compteur affichant le nombre d’écoutes depuis 2008.

Mais comment a-t-il fait ça ? Je ne suis pas un génie de l’informatique, ni un type qui arrive à envoyer des informations dans le code par la seule force de sa pensée, ni même ne met à jour son code HTML à chaque fois qu’il écoute une track. Non, non, j’ai utilisé l’API1 de Last.fm, tout simplement.
Cette idée m’est venue en voyant le footer du site de Kerem Suer (très joli site au passage, j’aime beaucoup l’épuration). En voyant son footer je me suis demandé comment il avait pu faire pour afficher ces informations toutes bêtes.

Donc, il faut obtenir une clef d’API de Last.fm, à cette adresse, et les choses sérieuses peuvent commencer.

On créé donc un fichier lasfm.php dans lequel on va initialiser notre appel d’information en passant par le fichier XML que Last.fm nous fournit. C’est en fait l’idée, Last.fm nous fournit un fichier XML dans lequel on trouve toutes les informations dont nous avons besoin (les dernières tracks lues, les informations de l’utilisateur).
Nous allons donc récupérer ces informations avec PHP.


  $apiKey = 'votre-clef-d-api';
  $user = 'votre-nom-d-utilisateur';
  class LastFM{
    public $apiKey;
    function __construct($api){
      $this->apiKey = $api;

    }


    function getRecentTracks($user){
      $curl = curl_init("http://ws.audioscrobbler.com/2.0/?limit=1&method=user.getrecenttracks&user=$user&api_key=".$this->apiKey);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_HEADER, 0);
      curl_setopt($curl, CURLOPT_TIMEOUT, 3);
      $data = curl_exec($curl);
      curl_close($curl);
      $xml = new SimpleXmlElement($data);
      # print_r($xml);
      return $xml->recenttracks;
      
    }

    function getUserInfo($user){
      $curl = curl_init("http://ws.audioscrobbler.com/2.0/?method=user.getinfo&user=$user&api_key=".$this->apiKey);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($curl, CURLOPT_HEADER, 0);
      curl_setopt($curl, CURLOPT_TIMEOUT, 3);
      $data = curl_exec($curl);
      curl_close($curl);
      $xml = new SimpleXmlElement($data);
      #print_r($xml);
      return $xml->user;
    }

  }

Si vous voulez tester le fait que votre code appelle les bonnes informations, vous pouvez dé-commenter les lignes avec print_r($xml); (en autant le signe dièse au début de la ligne2). Les informations s’afficheront en brut sur votre page.

Bon ensuite je ne suis pas développeur backend, je ne pourrais pas en détail vous commenter mon code, pour cela, je vous conseille encore le tutoriel de Grafikart.

Une fois ce fichier réalisé, grâce auquel on s’est connecté aux méthodes getrecenttracks et getinfo qui vont nous permettre de récupérer les dernières tracks et les informations de l’utilisateur (en fait une sorte de « pont » avec Lastfm), il va falloir afficher ces informations là où on le souhaite.

Ici, c’est dans mon fichier footer.php que ça va se passer. Je vais intégrer le fichier lastfm.php dans le footer pour pouvoir appeler les informations, ce qui nous donne ceci :

 
<div class="widget lastfm-widget">
 <?php require "lastfm.php"; 
 $lastfm = new LastFM($apiKey);
 $tracks = $lastfm->getRecentTracks('bsurde');
 $isSecond = true;
 $i=2; 
 foreach ($tracks->track as $key => $value): ?>
 <?php if($i==2)
 { ?>
 <a href="<?php echo $value->url; ?>">
 <img src="<?php echo $value->image[1]; ?>" class="lastfm-cover">
 </a>
 <h3 class="lastfm-title">J'écoute actuellement</h3>
 <div class="lastfm-artist"><?php echo $value->artist; ?></div>
 <div class="lastfm-name"><?php echo $value->name; ?></div>
 <?php } else {} $i++;endforeach; ?>
 </div>
 <div class="widget lastfm-widget">
  <?php $users = $lastfm->getUserInfo('bsurde'); ?>
  <h3 class="lastfm-title"><?php echo $users->playcount; ?></h3>
  <p class="lastfm-playcount">Chansons écoutées depuis 2008</p>
 </div>

Vous pouvez voir que j’ai lancé un compteur pour ne prendre en compte que le premier élément du foreach .
En effet si on ne fait pas ça, la lecture en cours et la dernière chanson écoutée seront affichées et ce malgré le fait que nous ayons passé le paramètre limit à 1 dans la méthode d’appel (paramètre qui permet de réduire le nombre de résultat).
(Je ne sais pas si je suis clair, mais en gros à un moment, on a deux éléments considérés comme premier qui s’affichent.)
Il m’a fallut donc mettre le deuxième élément en display:none grâce à CSS.

Une fois tout ça fait, vos informations s’affichent correctement, vous pouvez les styliser avec CSS.

N’hésitez pas à regarder dans la documentation de l’API pour trouver la structure XML des appels et pour connaitre les identifiants.

Et je suis à votre disposition dans les commentaires.




Vous pouvez retrouver cet article en action ici.

Lastfm
Ouai, je suis de la team UNE track.
1 API pour Application Programming Interface, c’est à dire une interface de programmation permettant de connecter un logiciel à un autre logiciel. Le logiciel permettant qu’on se connecte à lui a été préalablement programmé pour accepter un ensemble de fonction et de classe. Ces dernières permettent de récupérer des informations de ce logiciel. Ici, Lastfm permet qu’on se connecte à lui pour récupérer des informations.
2 Pour commenter une ligne en PHP il faut ajouter un signe dièse en début de ligne, pour un bloc de code sur plusieurs lignes, il faut l’entourer d’un slash-étoile et le fermer par un étoile-slash. Petit rappel au passage.

Articles de même catégorie :