Convertit tous les caractères éligibles en entités HTML
Cet article présente les API de données de YouTube, montre comment vous pouvez l'utiliser pour parcourir le contenu vidéo généré par l'utilisateur ; accéder aux métadonnées de la vidéo, les commentaires et les réponses ; et effectuer des recherches par Mots clés.
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.
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 :
Exemple : Copier 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.
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
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 :
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 :
Exemple : Copier 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 :
Exemple : Copier 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 |
Grands favoris |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/top_favorites |
Plus partagés |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_shared |
Plus populaires |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_popular |
Plus récent |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_recent |
Les plus discutés |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_discussed |
Plus a répondu |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_responded |
Récemment mis en favoris |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/recently_featured |
Vidéos tendances |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/on_the_web |
Les plus populaires |
URL: http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed |
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
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 :
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 :
Exemple : Copier 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 :
Exemple : Copier 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 :
Exemple : Copier 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; }
TELECHARGER LE CODE SOURCE COMPLET DES EXEMPLES DE CE TUTORIAL
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 :
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 :
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¶mè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
Canal standard RSS
Graphiques de l'événement en direct
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
chapitre précédent | sommaire | chapitre suivant |