Pré-requis :
- Avoir une clé Api Google https://console.developers.google.com
- Connaitre l’ID de la chaine Youtube sur laquelle on veut boucler
Bon à savoir : L’API Youtube retourne des objets au format Json, on va donc utiliser l’itérateur du même nom.
La boucle « BOUCLE_youtube » va retourner les 2 dernières vidéos de la chaine Youtube. Dans la source, il faut remplacer CLE_API_GOOGLE par votre cle API Google et ID_CHAINE_YOUTUBE par l’identifiant de la chaine Youtube.
La boucle « BOUCLE_youtube_details » va retourner toutes les infos sur une vidéos (miniature, titre, durée...). Dans la source, il faut remplacer CLE_API_GOOGLE par votre cle API Google.
<B_youtube>
<ul>
<BOUCLE_youtube(DATA)
{source json,'https://www.googleapis.com/youtube/v3/search?key=CLE_API_GOOGLE&channelId=ID_CHAINE_YOUTUBE&part=id&order=date&maxResults=2'}
{datapath /items}
{0,2}
>
<li>
<BOUCLE_youtube_details(DATA){source json,#VAL{'https://www.googleapis.com/youtube/v3/videos?key=CLE_API_GOOGLE&part=snippet,contentDetails&id='}|concat{#VALEUR{id}|get_object_vars|table_valeur{videoId}}}
{datapath /items}
{0,1}
>
<ul>
[<li class="video_image"><a href="http://www.youtube.com/watch?v=#VALEUR{id}" rel="external"><img src="(#VALEUR{snippet}|get_object_vars|table_valeur{thumbnails}|get_object_vars|table_valeur{standard}|get_object_vars|table_valeur{url})" alt="" /></a></li>]
[<li class="video_titre">(#VALEUR{snippet}|get_object_vars|table_valeur{title})</li>]
<li class="video_duree">[(#VALEUR{contentDetails}|get_object_vars|table_valeur{duration}|match{(\d+)H}|replace{'H',''}):][(#VALEUR{contentDetails}|get_object_vars|table_valeur{duration}|match{(\d+)M}|replace{'M',''})][:(#VALEUR{contentDetails}|get_object_vars|table_valeur{duration}|match{(\d+)S}|replace{'S',''})]</li>
</ul>
</BOUCLE_youtube_details>
</li>
</BOUCLE_youtube>
</ul>
</B_youtube>
<//B_youtube>
Comme l’API retourne des objets et non des tableaux, on est obligé de passer par la fonction php get_object_vars() pour récupérer les valeurs.
Les informations sur le format des données retournées est disponible ici : https://developers.google.com/youtube/v3/docs/videos
Attention : il faut avoir l’extension Php Openssl activé sur votre serveur.
Discussions par date d’activité
6 discussions
Bonjour, je cherche à récupérer l’image d’une vidéo. Ce faisant, j’ai créer un champs extra dans spip qui permet aux auteurs de ne renseigner que le nom de la vidéo, c’est-à-dire que pour cette url
https://www.youtube.com/watch?v=4FGAFNIyVoE
l’auteur n’a qu’à renseigner4FGAFNIyVoE
dans le champ dédié. En revanche, je galère pour récupérer l’image de la vidéo. Pourriez vous m’aider ?hello,
Dans le code donné en exemple, c’est cette partie qui renvoie la miniature :
Ce qui peut être simplifié de la sorte (en mettant une clé pour l’API bien sûr) :
Il y a plusieurs tailles possibles :
* default
* medium
* high
* standard
Répondre à ce message
Bonjour, cela fonctionne en effet très bien mais que doit-on adapter pour non pas reprendre le contenu d’une chaîne mais d’une playlist ? Merci.
Dans ce cas l’url à utiliser est du type :
https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=XXXXXX&maxResults=XX&key=XXXX
cf https://developers.google.com/youtube/v3/docs/playlistItems
Répondre à ce message
Excellent ! Marche très bien. Merci pour cette contribution très utile et pour les modifications concernant get_object_vars().
Répondre à ce message
Remarquable contribution pour comprendre l’utilisation concrète des boucles DATA, et très bonne remarque de eidôlon concernant les
get_object_vars
. Le code fonctionne nickel.Répondre à ce message
Salut, merci pour l’exemple j’ai dû faire les modifications suivantes pour le faire fonctionner :
- suppression des get_object_vars()
- la ligne
devient
valeurs possibles pour thumbnails : object
API YouTube
Répondre à ce message
Excellent article !!! Merci !
Je chercher à faire un truc un peu plus sioux, je voudrais faire un peu comme le système de syndication c’est à dire proposer de créer des articles à chaque nouvelle vidéo postée sur une chaine Youtube
Une idée de comment faire cela ?
Merci d’avance.
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |