Utiliser l'API de YouTube avec PHP

Traiter et intégrer les données de YouTube dans votre application PHP avec l'extension SimpleXML PHP


PHP et XML

Le site de partage de vidéo YouTube permet aux développeurs d'applications Web d’accéder au contenu public par son développeur API basée sur REST. 

 L'extension SimpleXML de php est idéale pour traiter les flux XML générés par cette API et leur utilisation pour construire des applications PHP personnalisées.

Cet article présente les API de données de YouTube, montre comment vous pouvez les utiliser pour parcourir le contenu vidéo généré par l'utilisateur, accéder aux métas donnés de la vidéo, les commentaires et les réponses, et effectuer des recherches par Mots clés.

 

 Introduction

Quand on parle de partage de vidéos en ligne, le site le plus populaire est de loin YouTube, avec des milliards de pages vues et des centaines de milliers de vidéos ajoutées chaque jour. Aujourd'hui, YouTube propose aussi des vidéos de musique, des clips de TV shows, des clips d'animation et bien plus encore. Le service permet aussi aux utilisateurs de marquer les vidéos avec des mots clés et trouver les vidéos les plus populaires à un moment donné.

Une des caractéristiques de YouTube est son API de données, qui permet aux développeurs d'accéder et rechercher les données vidéo YouTube via une API basée sur REST et intégrer ces données dans leur propre application prenant en charge XML.

Ce n'est pas difficile à faire, Si vous utilisez PHP5, tout ce que vous à faire est d’écrire un code qui vous permet d'analyser et de décoder les réponses et intégrer les données résultantes dans l'interface de votre application. 

Cet article explique la méthode, vous montrant comment accéder au contenu public par le biais de l'API de YouTube et intégrer ce contenu dans votre application PHP à l'aide de SimpleXML.


Présentation du format de données XML de YouTube

Avant de plonger dans le code PHP, quelques mots sur l'API de données de YouTube. 

Les choses commencent avec une requête HTTP à une ressource désignée. Cette requête HTTP contient une requête avec un ou plusieurs paramètres d'entrée ; le serveur répond à la requête avec une réponse au Atom ou RSS-format, adaptée pour l'analyse dans n'importe quel client prenant en charge XML.

Pour voir comment cela fonctionne, essayez d'accéder dans votre navigateur Web favori à l' URL

API YouTub vidéos les plus vus 

Cette URL  renvoie la liste des vidéos les plus fréquemment consultés sur YouTube à l'heure actuelle. La réponse XML brute à cette URL (que vous pouvez afficher dans le code source de la page résultante) contient des informations détaillées sur ces vidéos et peut ressembler à la structure suivante :

Sélectionner le code

<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/ ..... />
  <author>
    <name>YouTube</name>
    <uri>http://www.youtube.com/</uri>
  </author>
  <generator version='beta' uri='http://gdata.youtube.com/'>
  YouTube data API</generator>
  <openSearch:totalResults>94</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>5</openSearch:itemsPerPage>
<entry>
.......
   <media:group>
     .....
      <media:player url="video url"/>
      <media:thumbnail url="video url" height="height" width="width"/>
      <media:title type="plain">Title…</media:title>
         ........
   </media:group>
.......
</entry>

 

Regardons cette sortie pour se familiariser avec ses principaux éléments :

* L'API de données YouTube répond à une demande avec un flux qui contient les données demandées. 

Différents flux sont disponibles : RSS vidéo, RSS vidéo commentaires, RSS utilisateur playlist, RSS contact utilisateur et ainsi de suite. Dans la plupart des cas, par conséquent, la réponse XML contient un élément <feed> comme élément racine. 

L'élément <feed> contient des éléments <link> qui contiennent des URLs pour la page courante, suivante, et le page précédente du résultat défini, et des éléments <openSearch :>, qui contiennent des statistiques sommaires pour la recherche.

* L'élément ultrapériphérique <feed> renferme un ou plusieurs éléments <entry>, chacun représentant une vidéo correspondant à la requête. Chaque <entry> contient des informations complémentaires sur la vidéo qu'il représente, y compris la catégorie, titre, description, date de publication, auteur et durée. Chaque <entry> contient également des éléments  <link>, qui fournissent des liens URL pour afficher la vidéo, ses réponses et autres vidéos connexes sur le site Web de YouTube.

* Un élément <media:group> dans chaque <entry> contient des informations détaillées sur la vidéo : son titre, la description, la disponibilité en divers formats, liens miniature et liens de lecteur vidéo.

* Un élément <yt:statistics> dans chaque <entry> fournit des statistiques sur les personnes ayant visionner la vidéo, alors qu'un élément <gd:rating> fournit la note moyenne de la vidéo, et un décompte du nombre total d'utilisateurs qui l’ont évalué.

Vous êtes d’accord qu'il s'agit d'un grand nombre d'informations,  probablement plus que vous auriez normalement attendu. C'est précisément cette base d’information qui rend l'API de données de YouTube si intéressant à travailler, car il permet aux développeurs la liberté de faire de nouvelles applications.


Récupération des annonces vidéo

Nous allons maintenant passer à un exemple de traitement d'une API de données de YouTube à l'aide de PHP.

EN utilise SimpleXML pour extraire des fragments de données confidentielles et les mettre en forme dans une page Web

Obtenir les vidéos les plus récentes.

L’API utilisée pour avoir les vidéos les plus récents est l’api que nous avons vue ci haut que voici :

http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed

C’est cette API que nous allons utiliser pour notre exemple.

Voici une vue de vidéo les plus vus :

vidéo les plus vues

 On commence en utilisant l'objet simplexml_load_file() pour envoyer une requête à l'URL et convertir le feed RSS dans un objet SimpleXML.

Ce qui donne le code suivant :

Sélectionner le code

	$URLflux ='http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed';
	$sxml = simplexml_load_file($URLflux);

 

 On parcourt ensuite les éléments <entry> dans la réponse, en traitant  chacun d'eux à l'aide d'une boucle foreach() et récupérer les informations . Voici comment chacune des valeurs est obtenue :

Vidéo meta-données sont stockées dans la collection de nœuds <media:group>, sous chaque nœud <entry>.

La méthode children() de SimpleXML en conjonction avec la media:namespace retourne cette collection de nœuds comme $media et accède ensuite respectivement au titre de la vidéo et à la description comme 

$media->group->title 

et 

$media->group->description .

L'attribut url des différents éléments <media:thumbnail> stocke une URL de la vignette vidéo. Pour accéder à cette valeur, utilsez :

 $media->group->thumbnail[0]->attributes()

et accéder ainsi à la clé du tableau d'attributs qui en résulte qui est l’url de la vignette ou miniature .

L'attribut url des éléments <media:player> stocke une URL pour le lecteur vidéo. Pour accéder à cette valeur, utilisez

$media->group->player->attributes()

et accéder à la clé du tableau d'attributs qui en résulte.

L'élément <yt:duration> sous l'élément <media:group> stocke la durée de la vidéo en secondes.

La méthode $media->children() conjointement avec le yt: namespace retourne ce nœud en tant qu'objet SimpleXML et la méthode de l'objet attributes() récupère la valeur de l'attribut seconds . Pour obtenir la durée en minutes, vous divisez cette valeur par 60.

Dans la même veine, des statistiques de visites pour la vidéo sont disponibles dans l'élément <yt:statistics>. Encore une fois, pour accéder à cet élément c’est fait à travers l'espace de noms, et la méthode attributes() de l'objet qui en résulte ce qui  récupère la valeur de l'attribut viewCount .

Le classement des utilisateurs pour une vidéo se trouvent dans l'élément <gd:rating> sous chaque <entry>. Pour accéder à cet élément, appelez children() méthode de SimpleXML à l'aide de son espace de noms et accéder à attribut average de l'objet qui en résulte pour obtenir la cote moyenne.

Ce qui donne le code suivant :

Sélectionner le code

foreach ($sxml->entry as $entry) {
      $media = $entry->children('http://search.yahoo.com/mrss/');
      $attrs = $media->group->player->attributes();
      $watch = $attrs['url'];
      $attrs = $media->group->thumbnail[0]->attributes();
      $thumbnail = $attrs['url'];
      $yt =
$media->children('http://gdata.youtube.com/schemas/2007');
      $attrs = $yt->duration->attributes();
      $length = $attrs['seconds'];
       $yt =
$entry->children('http://gdata.youtube.com/schemas/2007');
      $attrs = $yt->statistics->attributes();
      $viewCount = $attrs['viewCount'];
      $gd = $entry->children('http://schemas.google.com/g/2005');
      if ($gd->rating) {
        $attrs = $gd->rating->attributes();
        $rating = $attrs['average'];
      } else {
        $rating = 0;
 }

 

Une fois que vous obtenir tous ces renseignements, le formatage et l’affichage sur une page Web est une simple question de règles CSS  et du HTML.

Notez que le flux RSS utilisée dans l’exemple est l'un des différents flux standard fourni par YouTube pour les développeurs. 

Ci après la liste complète des  flux RSS standards comme il est donnée par YouTub:

Nom

URL et  Description

Plus appréciés

URL: http://gdata.youtube.com/feeds/api/standardfeeds/top_rated
Description : Ce flux contient des vidéos YouTube les plus notées

Grands favoris

URL: http://gdata.youtube.com/feeds/api/standardfeeds/top_favorites
Description : Ce flux contient des vidéos plus fréquemment signalés comme vidéos favorites

Plus partagés

URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_shared
Description : Ce flux répertorie les vidéos YouTube plus fréquemment partagés sur Facebook et Twitter.

Plus populaires

URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_popular
Description : Ce flux contient des vidéos de YouTube les plus populaires, sélectionnés à l'aide d'un algorithme qui combine de nombreux signaux différents pour déterminer la popularité globale.

Plus récent

URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_recent
Description : Ce flux contient les vidéos récemment ajoutés sur YouTube.

Les plus discutés

URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_discussed
Description : Ce flux contient les vidéos de YouTube qui ont reçu le plus grand nombre de commentaires.

Plus a répondu

URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_responded
Description : Ce flux contient des vidéos de YouTube qui reçoivent le plus réponses vidéo.

Récemment mis en favoris

URL: http://gdata.youtube.com/feeds/api/standardfeeds/recently_featured
Description : Ce flux contient des vidéos récemment mis en vedette sur la page d'accueil de YouTube ou onglet vidéos en favoris

Vidéos tendances

URL: http://gdata.youtube.com/feeds/api/standardfeeds/on_the_web
Description : Ce flux répertorie les vidéos tendances comme on le voit sur YouTube Trends, dont les surfaces vidéos populaires que leur popularité est en hausse et analyse également les grandes tendances de développement au sein de la communauté de YouTube.

Les plus populaires

URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed
Description : Déconseillée depuis le 23 juillet 2012. Ce flux retourne en fait le même contenu que les most_popular se nourrissent. Par conséquent, nous recommandons que vous mettez à jour votre code afin d'utiliser le most_popular d'alimentation au lieu de cela

Pour plus de détail reportez-vous au Guide de  YouTube des données API pour développeur ressources.


TELECHRGER LE CODE SOURCE COMPLET DES EXEMPLES DE CE TUTORIAL



Comment travailler avec les catégories vidéo

Outre les flux standards décrite dans la section précédente, YouTube permet aussi aux développeurs de récupérer les vidéos par catégorie. 

Cela se fait en ajoutant le nom de catégorie pour l'URL de RSS de la vidéo, tels que :

http://gdata.youtube.com/feeds/api/videos/-/Travel/ 

ou 

http://gdata.youtube.com/feeds/api/videos/-/Sports/.

Comme dans l’exemple précédent, dans cet exemple on commence aussi en envoyant une requête GET pour le flux URL pour la catégorie de voyage et transformer la réponse en un objet SimpleXML. Puis, il effectue une itération sur les éléments < Entry > dans la collection pour récupérer le titre, la description, la durée etc. …

Une fois toutes les informations sont récupérées, l’affichage et la mise en forme de ces informations comme une liste ordonnée est alors une question de CSS ET HTML. 

Nous avons également ajouté un nouveau dispositif : il rassemble les données sommaires incluses dans les éléments <openSearch :> dans la réponse XML et affiche le nombre total de vidéos trouvé dans chaque catégorie.

La figure suivante montre la sortie :

categorie de vidéos

Une liste complète des catégories de YouTube depuis est donnée dans l'URL suivante :

http://gdata.youtube.com/schemas/2007/categories.cat

Il n'est pas trop difficile non plus d'écrire un script PHP qui récupèrer les données de ce fichier, l'analyser et ensuite utiliser l'API de YouTube pour récupérer les cinq vidéos les plus récents dans chaque catégorie.

Pour ecrire le code PHP on procède comme suit :
On extrait d'abord la liste catégorie XML codé de l’URL http://gdata.youtube.com/schemas/2007/categories.cat. En utilisant la méthode xpath() de l’objet SimpleXML pour récupérer les noms de catégorie de YouTube dans cette liste.
Ce qui donne le code suivant :

Sélectionner le code

$xmlCatego = simplexml_load_file( http://gdata.youtube.com/schemas/2007/categories.cat);
    $xmlCatego->registerXPathNamespace('atom', 'http://www.w3.org/2005/Atom');
    $categories = $xmlCatego->xpath('//atom:category');

 
Puis on exécute une boucle foreach pour extraire les catégories et les cinq vidéos les plus récents dans chaque catégorie.
Ce quis e passe-t-il à l'intérieur de la boucle foreach() ne devrait pas vous étonner maintenant, car il est presque identique à la procédure décrite dans les exemples que nous avons vu précédemment dans cet article.
Voici le code de la boucle pour obtenir l’URL de chaque catégorie :

Sélectionner le code

foreach ($categories as $c) {
      $URLflux = "http://gdata.youtube.com/feeds/api/videos/-/{$c['term']}?max-results=5&orderby=viewCount";
      
      // Lire et stocker le feed dans un objet SimpleXML
      $xmlObjet = simplexml_load_file($URLflux);
      
      //obtenir des comptes analytiques d'opensearch : espace de noms
      $counts = $xmlObjet->children('http://a9.com/-/spec/opensearchrss/1.0/');
      $total = $counts->totalResults; 
      ?>

 

Cependant, il est intéressant de souligner les deux paramètres supplémentaires ajoutés à l'URL :
• Le paramètre max-results spécifie le nombre de résultats maximum à retourner dans le flux.
• Le paramètre orderby spécifie comment trier ces résultats par ordre de :
La Popularité (viewCount),
La Note des utilisateurs (rating)
Le temps publication (published).

Et Voici le code de la boucle pour analiser l’URL de la catégorie et obtenir les 5 vidéos les plus vus :

Sélectionner le code

        
     //analyse des entrées catégorie
	// affichage des détails de chaque entrée
      foreach ($xmlObjet->entry as $entry) {
        // obtenir les noeuds dans le média
        $media = $entry->children('http://search.yahoo.com/mrss/');
        
        // obtenir l'URL de la vidéo
        $attrs = $media->group->player->attributes();
        $watch = $attrs['url']; 
        
        // obtenir la durée de la vidéo
        $yt = $media->children('http://gdata.youtube.com/schemas/2007');
        $attrs = $yt->duration->attributes();
        $length = $attrs['seconds']; 
        
        // obtenir la note des utilisateurs
        $gd = $entry->children('http://schemas.google.com/g/2005'); 
        if ($gd->rating) {
          $attrs = $gd->rating->attributes();
          $rating = $attrs['average']; 
        } else {
          $rating = 0; 
        }

 

TELECHRGER LE CODE SOURCE COMPLET DES EXEMPLES DE CE TUTORIAL


Effectuer la recherche par mot-clé

Comme vous le savez, YouTube permet aux utilisateurs de marquer des vidéos avec des mots clés, pour les rendre plus faciles à identifier. 

Et l'API de YouTube permet aux développeurs de rechercher des vidéos par mot clé, d'une manière similaire à celle utilisée pour les catégories.

 Par exemple, pour rechercher des vidéos contenant le tag avec le mot clé ' « bateau », envoyez une requête GET à

http://gdata.youtube.com/feeds/api/videos/-/bateau.

 De même, pour trouver toutes les vidéos avec les mots clés « westminster » et « london », vous pouvez envoyer une requête GET à

http://gdata.youtube.com/feeds/api/videos/-/westminster/london.

 La réponse XML à ces demandes sera similaire à celle montré tout au début de cet article: <feed> contenant des <Entry> , avec chaque <entry> représentant une vidéo correspondante.

Inutile de dire, ce qui rend très facile de construire un moteur de recherche simple en PHP qui utilise la base de données de YouTube pour les vidéos correspondant à des mots-clés fournis par l'utilisateur :

vue de la page recherche

Une fois que l'utilisateur envoie le formulaire, le script vérifie d'abord si un ou plusieurs mots clés ont été entrés et stoppe le script de traitement avec un message d'erreur s'il ne trouve aucun mot clé. Si les mots clés de recherche sont présents, le script utilise ces mots dans une URL de flux sur YouTube et génère une demande à l'API de YouTube. 

Ensuite, il convertit le document XML résultant en un objet SimpleXML pour générer une page de résultats, à l'aide des techniques décrites plus haut dans cet article .

Deux choses sont à souligner :

  • Les mots clés entrés par l'utilisateur dans le formulaire de recherche sont reformatés pour l’utilisation dans URL du feed. Ceci est fait en éliminant dans un premier temps tous les espaces blancs aux extrémités de la chaîne avec la fonction trim() de PHP, puis remplacer les espaces entre les mots clés avec des barres obliques (/) à l'aide de la fonction str_replace() de PHP.
  • En plus d'afficher le nombre total de résultats trouvés, on fait également usage de  <openSearch:startIndex> et <openSearch:itemsPerPage> éléments pour afficher l'offset de début et de fin du résultat de la valeur affichée

Les paramètres de requête YouTube API v2.0

Avant de terminer avec ce très long article, je vrux que vous sachez deux chse :

1 – L’API de YouTub nous permet d’ajouter des paramètres à l4URL du feed pour avoir des requête plus précises.

         Pour ajouter un paramètre on procéde comme suit :

URL du feed + ? + paramètre1&paramètre2 . . .

Exemple :   

Le paramètre time est pris en charge pour recherche RSS et pour un certain nombre de feed standard et événement  graphiques ainsi.

Les valeurs valides pour ce paramètre sont : today (jour 1), this_week (7 jours), this_month (1 mois) et all_time. La valeur par défaut pour ce paramètre est all_time.

Dans une requête d'extraction des résultats, le paramètre de temps tim restreint la recherche aux vidéos téléchargées dans un délai imparti.

Dans une requête pour récupérer une norme de feed ou événement graphique en direct, le paramètre de temps restreint la réponse de l'API pour ne contenir que des résultats pertinents pour le laps de temps spécifié.

Par exemple, si la valeur de paramètre de temps est à this_week une demande pour le flux de vidéo standard de top_rated, le feed  renvoie les vidéos ayant reçu les meilleures notes au cours de la semaine en cours.

 La syntaxe est comme suit :

https://gdata.youtube.com/feeds/api/standardfeeds/top_rated?time=this_week

Ce paramètre time est pris en charge pour les flux et les graphiques suivants :

Vidéo standard RSS

  • top_rated
  • top_favorites
  • most_popular (les seuls valeurs prises en charge sont today et all_time)
  • most_discussed
  • most_responded
  • most_viewed (obsolète)

Canal standard RSS

  • most_subscribed  (les seuls valeurs prises en charge sont this_week, this_month et all_time.)
  • most_viewed

Graphiques de l'événement en direct

  • upcoming – ce flux ne supporte que les valeurs de paramètre today et this_week.

Pour plus de détail sur les diferents paramètres possibles visiter le site suivant :

https://developers.google.com/youtube/2.0/developers_guide_protocol_api_query_parameters

2 – On peut aussi restreindre aussi la recherche à une région donnée en insérant un ID de la région comme suit

http://gdata.youtube.com/feeds/api/standardfeeds/regionID/feedID?v=2

 pour la France id est FR  et donc pour  avoir les vidéos de la France on écrit :

Pour plus de détail sur les diferents ID possibles visiter le site suivant :

https://developers.google.com/youtube/2.0/developers_guide_protocol_video_feeds?hl=en

 

TELECHRGER LE CODE SOURCE COMPLET DES EXEMPLES DE CE TUTORIAL

Par carabde 30 mars 2015