Utiliser l'API YouTube pour uploader des vidéos depuis votre site web
Date de publication : 6 mai 2009.
Par
Jérôme Place
Apprenez à utiliser l'API YouTube pour rechercher et uploader des vidéos depuis votre site web.
I. Introduction
II. Pré-requis
III. Installation
III-A. Installation de Zend_GData
III-B. Inscription à YouTube
III-C. Création d'une clé développeur
IV. Première utilisation
V. L'envoi de vidéos
V-A. L'authentification
V-B. Envoi d'informations sur la vidéo
V-C. Récupération du token
V-D. Envoi de la vidéo
V-E. Retour d'erreur et affichage de la vidéo
VI. Conclusion
VII. Références
VIII. Remerciement
I. Introduction
La vidéo est devenue en quelques années une composante majeure d'Internet et s'impose comme un élément
incontournable pour enrichir le contenu d'un site web. Les webmestres qui souhaitent utiliser ce
média sont souvent confrontés à des soucis d'hébergement car les fichiers vidéos pesant
de quelques Mo à plusieurs Go, le manque d'espace disque devient vite problématique. Heureusement
sont apparus des sites d'hébergement de vidéos comme YouTube ou Dailymotion (pour ne citer que les
principaux) qui offre au grand public un service gratuit de partage et de diffusion de
vidéos.
YouTube va encore plus loin puisqu'il propose depuis peu une
API
et ouvre ainsi son service de partage de vidéos aux développeurs désireux d'utiliser cette plateforme
pour enrichir le contenu de leur site internet.
Recherche par mots-clés, classement des meilleurs vidéos, upload de fichiers, nous allons voir que de nombreuses applications sont possibles.
La plus intéressante est certainement l'envoi de fichiers vidéos depuis son site web directement sur la plateforme
YouTube, et ce en toute transparence pour les internautes.
II. Pré-requis
Pour suivre ce tutoriel, il est nécessaire :
-
de connaître les langages PHP et HTML
-
d'avoir suivi le tutoriel sur l'upload de fichiers en PHP
-
d'avoir quelques notions sur le Framework Zend
-
de disposer d'un serveur (local ou distant) avec une version PHP >= 5.1.4
Public visé : développeurs PHP de niveau intermédiaire ou avancé.
III. Installation
L'utilisation de l'API YouTube requiert 3 étapes préalables : l'installation de Zend_GData, l'ouverture d'un compte YouTube et enfin la création
d'une clé développeur.
III-A. Installation de Zend_GData
L'API YouTube fait partie des nombreuses APIs proposées par Google et regroupées sous le sigle GData (pour Google Data).
Son utilisation avec des applications PHP passe par le Framework Zend, et notamment la librairie Zend_GData, qui contient des classes spécifiques simplifiant son intégration
à un projet PHP. Il faudra donc installer une version de Zend_GData, si possible >= 1.7.2.
Etapes à suivre
-
Commencer par télécharger la dernière version de Zend_GData disponible à l'adresse : http://framework.zend.com/download/webservices/
-
Décompresser l'archive. Vous y trouverez un dossier "library" qui contient un sous-dossier "Zend".
-
Placer ce répertoire Zend à la racine de votre site, ou dans votre répertoire qui contient les librairies
PHP. Vous noterez que ce dossier contient un sous-répertoire GData.
-
La librairie Zend_GData, et par conséquent l'accès à l'API YouTube sont installés.
III-B. Inscription à YouTube
Ouvrir un compte YouTube
-
Aller sur le site www.youtube.com et créer un nouveau compte via le lien Inscription (si vous n'en possédez pas déjà un).
-
Conserver vos identifiants de connexion (login et mot de passe).
III-C. Création d'une clé développeur
Les vidéos publiques de YouTube sont en accès libre et vous pouvez d'ors et déjà effectuer
des recherches grâce à la librairie Zend_GData. Cependant, les opérations avancées comme l'upload, la modification et la suppression
de vidéos requirent une identification. Cette authentification passe par une "clé développeur"
qui vous sera demandée pour communiquer avec la plateforme YouTube.
Obtenir une clé développeur
-
Rendez-vous sur la page : http://code.google.com/apis/youtube/dashboard/
-
Cliquer sur le lien "Create new developer key" et compléter le formulaire.
-
Vous obtiendrez alors 3 identifiants :
une clé développeur (Developer Key), un identifiant client (Client ID) et un identifiant pour votre application (Product ID).
-
Conserver ces 3 informations sous la main.

Création d'une clé développeur Google
IV. Première utilisation
Vous avez installé correctement le Framework Zend, ouvert un compte YouTube et créer vos identifiants de connexion ? Voyons maintenant alors
si tout fonctionne correctement. Pour cela, nous nous proposons d'effectuer une recherche de vidéos sur
le mot clé "sport".
<?php
require_once 'Zend/Gdata/YouTube.php';
function printVideoEntry($videoEntry)
{
echo 'Titre : ' . $videoEntry->getVideoTitle() . "<br />\n";
echo 'Description: ' . $videoEntry->getVideoDescription() . "<br />\n";
echo 'Tags: ' . implode(", ", $videoEntry->getVideoTags()) . "<br />\n";
echo 'URL du player Flash: <a href="'. $videoEntry->getFlashPlayerUrl() .'">'
. $videoEntry->getFlashPlayerUrl() . "</a>\n";
}
function printVideoFeed($videoFeed)
{
$count = 1;
foreach ($videoFeed as $videoEntry) {
echo "<p>Vidéo n°" . $count . "<br />\n";
printVideoEntry($videoEntry);
echo "</p> \n";
$count++;
}
}
$yt = new Zend_Gdata_YouTube();
$yt->setMajorProtocolVersion(2);
$query = $yt->newVideoQuery();
$query->setOrderBy('viewCount');
$query->setTime('this_week');
$query->setVideoQuery('sport');
$videoFeed = $yt->getVideoFeed($query->getQueryUrl(2));
printVideoFeed($videoFeed);
?>
|
Vous aurez remarqué que chaque vidéo est considérée comme un objet PHP appelé
$VideoEntry qui contient diverses informations (titre, description, catégorie, durée, etc.).
Vous pouvez retrouver la liste complète des informations associées à une vidéo sur
le guide développeur : PHP - YouTube Apis and Tools.
La recherche d'une vidéo renvoie en réalité un flux de plusieurs vidéos, flux qui peut alors être parcouru comme un simple tableau d'objets
$VideoEntry.
Voyons maintenant comment utiliser les autres fonctionnalités de YouTube, et notamment l'envoi de fichiers vidéo.
V. L'envoi de vidéos
Grâce à l'API YouTube, il n'est désormais plus nécessaire de vous connecter à votre espace YouTube pour
envoyer de nouvelles vidéos. En effet, l'API YouTube autorise l'envoi, la modification et même la suppression
de vidéos depuis une application tierce (comme un blog ou un site web). Bien entendu, vous ne pourrez
supprimer n'importe quelle vidéo, mais vous pourrez gérer toutes les vidéos de votre compte, et ce en
toute simplicité.
L'upload de vidéo passe par plusieurs étapes
-
Authentification grâce à votre login/passe YouTube et votre clé développeur
-
Envoi d'informations sur la vidéo : titre, description, tags, catégorie. Ces 4 informations sont
requises.
-
L'API YouTube retourne alors un identifiant unique (token)
-
Envoi de la vidéo associée au token par le biais d'un formulaire HTML
-
Traitement de la vidéo et retour d'erreurs si nécessaire
V-A. L'authentification
Plusieurs authentifications sont proposées par l'API YouTube mais par simplicité nous allons utiliser l'identification
http. Elle permet de s'identifier à son compte par un simple script PHP, et ce sans passage par le site YouTube.
<?php
require_once 'Zend/Gdata/YouTube.php';
require_once 'Zend/Gdata/ClientLogin.php';
$authenticationURL = 'https://www.google.com/youtube/accounts/ClientLogin';
$developerKey = '';
$applicationId = 'ytapi-XXXXXXXXXX';
$clientId = 'ytapi-YYYYYYYYYYY';
$username = "login";
$password = "pass";
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username,$password,'youtube',null,'MonSiteWeb',null,null,$authenticationURL
);
$yt = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);
?>
|
V-B. Envoi d'informations sur la vidéo
Une fois identifié, vous pouvez désormais préparer l'envoi de la vidéo en donnant des informations comme
le titre, la description, la catégorie et des mots-clés (tags). Notez qu'il est possible de définir
des tags spécifiques appelés Developer Tags (tags développeur) qui peuvent être utilisé pour identifier la vidéo
plus rapidement.
<?php
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$myVideoEntry->setVideoTitle('Titre de ma video');
$myVideoEntry->setVideoDescription('Description de ma video');
$myVideoEntry->setVideoCategory('Sports');
$myVideoEntry->SetVideoTags('motclé1, motclé2');
$myVideoEntry->SetVideoDeveloperTags(array('mydevtag','anotherdevtag'));
?>
|
V-C. Récupération du token
Une fois authentifié, nous allons informer la plateforme YouTube que nous souhaitons envoyer une vidéo.
L'API nous renvoie un identifiant unique, ou token, qui sera nécessaire pour créer le formulaire d'upload.
<?php
$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
$tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];
?>
|
V-D. Envoi de la vidéo
Nous avons un token valide, nous pouvons désormais créer le formulaire permettant de
choisir le fichier vidéo à uploader :
<?php
$nextUrl = 'http://www.monsiteweb.com/upload_video_ok.php';
$form = '<form action="'. htmlspecialchars($postUrl, ENT_QUOTES) .'?nexturl='
. urlencode($nextUrl) . ' method="post" enctype="multipart/formdata">
Fichier vidéo : <input name="file" type="file"/>
<input name="token" type="hidden" value="'. $tokenValue .'"/>
<input value="Envoyer la vidéo" type="submit" />
</form>';
echo $form;
?>
|
V-E. Retour d'erreur et affichage de la vidéo
Lorsque l'utilisateur valide le formulaire d'upload, le fichier choisi est alors envoyé sur votre compte YouTube
et va être analysé. En parallèle, YouTube renvoie des informations sur votre page $nextURL que vous
avez précédemment définie.
L'URL de retour se présente sous la forme : http://www.monsiteweb.com/upload_video_ok.php?status=200&id=JPF-DXF7hzc
status détermine si la vidéo a pu être envoyée correctement. id correspond à l'identifiant YouTube de
la vidéo.
<?php
if(isset($_GET['status']) AND $_GET['status']==200) {
$videoId = $_GET['id'];
$location = 'http://gdata.youtube.com/feeds/api/users/'.$username.'/uploads/' . $videoId;
$message='';
require_once 'Zend/Gdata/YouTube.php';
$yt = new Zend_Gdata_YouTube();
$myVideoEntry = $yt->getVideoEntry(null, $location);
$videoControl = $myVideoEntry->getControl();
$videoState = $myVideoEntry->getVideoState();
if($videoControl==null) {
$message = "Votre vidéo a été enregistrée avec succès";
}
elseif($videoState) {
$videoStateName = $videoState->getName();
switch($videoStateName) {
case 'rejected' :
if($videoState->getText()=='Duplicate video') {
$message = "Cette vidéo a déjà été envoyée. Merci de choisir
un autre fichier.";
} else {
$message = "Votre vidéo n'a pas été acceptée car elle ne
respecte pas les conditions d'utilisation de YouTube.
Peut-être est-elle trop longue ou ne respecte pas certains
droits d'auteur.";
}
break;
case 'failed' :
if($videoState->getText()=='Unable to convert video file') {
$message = "Echec lors de l'envoi : Impossible de convertir
le fichier vidéo. Vérifier qu'il s'agit bien d'un fichier
vidéo.";
}
else {
$message = "Votre vidéo n'a pas été acceptée car elle ne
respecte pas les conditions d'utilisation de YouTube.
Peut-être est-elle trop longue ou ne respecte pas certains
droits d'auteur.";
}
break;
case 'processing' : $message = "Votre vidéo a bien été envoyée. Elle
est désormais en cours de traitement et sera
publiée d'ici quelques heures.";
break;
default: $message = "Votre vidéo a bien été envoyée. Elle est
désormais en cours de traitement et sera publiée d'ici
quelques heures.";
}
}
else {
$message = "Votre vidéo a bien été envoyée. Elle est désormais en cours
de traitement et sera publiée d'ici quelques heures.";
}
}
else {
switch($upload_code) {
case 'DUPLICATE' :
$message = "Cette vidéo a déjà été envoyée. Merci de choisir un
autre fichier.";
break;
case 'FILE_MISSING' :
$message = "Veuillez sélectionner un fichier vidéo";
break;
default :
$message = "Une erreur s'est produite lors de l'upload du fichier.
Merci de contacter le webmaster si ce problème persiste";
}
}
echo $message;
?>
|
Vous remarquez que la gestion des erreurs suite à l'envoi d'un fichier n'est pas encore optimale et les informations renvoyées par
l'API restent assez vagues. Par ailleurs, il est important de prendre en compte le fait que YouTube met un certain temps à traiter un nouveau fichier vidéo.
Ce traitement peut durer plusieurs heures pendant lesquelles la plateforme va :
-
s'assurer que le fichier envoyé est bien une vidéo (et non une image ou un document texte),
-
vérifier que la vidéo n'a pas de copyright connu
-
calculer la durée totale et d'autres informations descriptives
-
créer des images vignettes de différentes tailles
Aussi, il sera nécessaire de vérifier quelques heures plus tard si la vidéo envoyée a été acceptée ou
non.
<?php
$videoId = $_GET['id'];
$location = 'http://gdata.youtube.com/feeds/api/users/'.$username.'/uploads/' . $videoId;
require_once 'Zend/Gdata/YouTube.php';
$yt = new Zend_Gdata_YouTube();
$videoEntry = $yt->getVideoEntry(null, $location);
$videoControl=$videoEntry->getControl();
if($videoControl==null) {
echo '<object width="480" height="385">
<param name="movie" value="'.$videoEntry->getFlashPlayerUrl().'"></param>
<param name="allowFullScreen" value="true"></param>
param name="allowscriptaccess" value="always"></param>
<embed src="'.$videoEntry->getFlashPlayerUrl().'"
type="application/x-shockwave-flash" allowscriptaccess="always"
allowfullscreen="true" width="480" height="385"></embed>
</object>';
}
else {
echo "La vidéo n'est pas encore disponible";
}
}
?>
|
Nous avons découvert les principes de bases pour rechercher et envoyer une vidéo grâce à l'API YouTube.
Cette dernière propose également de nombreuses autres fonctionnalités qui pourront vous être utiles selon vos besoins :
suppression de vidéos, ajout de commentaires, création de playlists, etc.
VI. Conclusion
Nous avons vu que l'API YouTube simplifie grandement la gestion de vidéos d'un site web et permet de résoudre les problèmes d'espace disque.
Les idées d'applications sont nombreuses : affichage d'une liste de vidéos sur un thème spécifique, simplification de la gestion d'un blog,
espace de partage de vidéos pour les membres d'une communauté, etc.
Hormis le PHP, sachez que d'autres librairies existent et permettent d'utiliser cette API avec des applications Java, JavaScript et .Net.
Sachez enfin que depuis janvier 2009, Dailymotion propose à son tour son API, mais elle se limite pour l'instant à de simples recherches par critères
et ne propose pas encore de système d'envoi de fichiers vidéo.
VII. Références
VIII. Remerciement
Je tiens à remercier vivement
Yogui pour son aide lors de l'écriture de ce premier tutoriel, ainsi que
ram-0000 pour sa relecture.


Les sources présentées sur cette page sont libres de droits
et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation
constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ©
2009 Jérôme Place. Aucune reproduction,
même partielle, ne peut être faite de ce site et de l'ensemble de son contenu :
textes, documents, images, etc. sans l'autorisation expresse de l'auteur.
Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 €
de dommages et intérêts.
Cette page est déposée.