Bonjour,
Je requiert votre avis et vos idées pour me sortir d'un soucis dans lequel je pense être trop immergé. En effet je ne vois peut être pas une solution qui serait simple car j'ai le nez dans ce code depuis 1 bonne semaine !
BUT
Le but de ce script est d'utiliser YOUTUBE API et de réaliser un script d'upload (PHP+FLASH) pour qu'une vidéo uploader via notre site soit uploader sur notre compte youtube en toute transparence pour l'utilisateur.
Choix techniques
Pour l'instant, j'ai un script PHP qui fonctionne en deux partie, la première partie l'utilisateur rentre le titre de la vidéo, les tags et la description de la vidéo (en effet les catégories sont choisies par le script, pour le développement nous mettons tout dans la catégories "sports")
Lors de l'envoi de ce premier formulaire, le script fait appel à youtube api qui renvoi un TOKEN (url unique) à laquelle on la vidéo doit être envoyée puis crée un formulaire qui permet la sélection et l'envoi du fichier.
Ensuite la vidéo est envoyée à Youtube (sans aucune idée du status de l'upload) puis fait appel à l'url défini dans le script (qui vérifie l'upload) status=200 (la vidéo a bien été envoyée) ...
Soucis ?
Afin d'avoir une idée de l'avancement de l'upload, j'ai penché sur un uploader en FLASH qui communique avec PHP via FLASHVAR.
Voici la fonction qui crée le premier formulaire (TITRE, DESCRIPTION, TAGS)
L'utilisateur rentre les metas et envois le formulaire qui exécute le script suivant :
Ce script fait donc appel au flv "flash_uploader.swf?+TOKEN VALUE" - la variable passe bien dans Actionscript puisque je l'affiche dans un champ texte et le token s'affiche bien.
Dans le code AS3 j'ai donc parmis le code de mon uploader, une fonction qui execute un fichier php :
Modifié par vallsymachinant (07 Jun 2011 - 10:56)
Je requiert votre avis et vos idées pour me sortir d'un soucis dans lequel je pense être trop immergé. En effet je ne vois peut être pas une solution qui serait simple car j'ai le nez dans ce code depuis 1 bonne semaine !
BUT
Le but de ce script est d'utiliser YOUTUBE API et de réaliser un script d'upload (PHP+FLASH) pour qu'une vidéo uploader via notre site soit uploader sur notre compte youtube en toute transparence pour l'utilisateur.
Choix techniques
Pour l'instant, j'ai un script PHP qui fonctionne en deux partie, la première partie l'utilisateur rentre le titre de la vidéo, les tags et la description de la vidéo (en effet les catégories sont choisies par le script, pour le développement nous mettons tout dans la catégories "sports")
Lors de l'envoi de ce premier formulaire, le script fait appel à youtube api qui renvoi un TOKEN (url unique) à laquelle on la vidéo doit être envoyée puis crée un formulaire qui permet la sélection et l'envoi du fichier.
Ensuite la vidéo est envoyée à Youtube (sans aucune idée du status de l'upload) puis fait appel à l'url défini dans le script (qui vérifie l'upload) status=200 (la vidéo a bien été envoyée) ...
Soucis ?
Afin d'avoir une idée de l'avancement de l'upload, j'ai penché sur un uploader en FLASH qui communique avec PHP via FLASHVAR.
Voici la fonction qui crée le premier formulaire (TITRE, DESCRIPTION, TAGS)
function createMetaForm(){
$form = '<div id="formulaire_upload">
<form action="?upload=on" method="post" enctype="multipart/form-data">
Titre : <input name="videoTitle" type="text"/>
Description : <input name="videoDescription" type="text"/>'
#Category : <input name="videoCategory" type="text"/>
.
'Tags : <input name="videoTags" type="text"/>
<input value="Suivant" type="submit"/>
</form></div>';
echo $form;
}
L'utilisateur rentre les metas et envois le formulaire qui exécute le script suivant :
require_once 'Zend/Gdata/YouTube.php'; // on charge la librairie YouTube
require_once 'Zend/Gdata/ClientLogin.php';
// Page sur laquelle sera renvoyé l'utilisateur après la validation
// du formulaire (URL de retour)
function createUploadForm($videoTitle,$videoDescription,$videoCategory,$videoTags){
// configuration et identifiants
$authenticationURL = 'https://www.google.com/youtube/accounts/ClientLogin';
$developerKey = ''; // Clé développeur
$applicationId = 'ytapi-Youtube WebTV Test'; // Identifiant de l'application
$clientId = 'ytapi-1oknicJINmSgpEnoRlAtxjj9VXh7PnCUzXi4g'; // Identifiant Client obsolete ...
$username = ""; // Login de votre compte YouTube
$password = ""; // Mot de passe de votre compte YouTube
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username,$password,'youtube',null,'MonSiteWeb',null,null,$authenticationURL);
$youTubeService = new Zend_Gdata_YouTube($httpClient, $applicationId, $clientId, $developerKey);
$myVideoEntry= new Zend_Gdata_YouTube_VideoEntry();
$myVideoEntry->setVideoTitle($videoTitle);
$myVideoEntry->setVideoDescription($videoDescription);
#Attention à la premiere lettre de la categorie qui doit etre en majuscule !
$videoCategory =strtoupper(substr($videoCategory, 0, 1)). substr($videoCategory,1);
$myVideoEntry->setVideoCategory($videoCategory);
$videoTagsArray = explode(' ', trim($videoTags));
$myVideoEntry->setVideoTags(implode(', ', $videoTagsArray));
// Récupération du token
$tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
try{
$tokenArray = $youTubeService->getFormUploadToken($myVideoEntry,$tokenHandlerUrl);
#if(loggingEnabled()){
# logMessage($httpClient->getLastRequest(),'request');
#logMessage($httpClient->getLastResponse()->getBody,'response');
#}
}
catch (Zend_Gdata_HttpException $httpException){
echo 'ERROR';
return;
}
$tokenValue = $tokenArray['token'];
$postUrl = $tokenArray['url'];
#redirection de l'utilisateur après l'upload.
$nextUrl = 'http://localhost/test_youtube/test_youtube3.php?upload=off';
#echo '<br>'.$postUrl.'?nexturl='.$nextUrl;
#echo '<br><br>'.$tokenValue;
// Affichage du formulaire
$form = '<form action="'. htmlspecialchars($postUrl) .'?nexturl='
. urlencode($nextUrl) . '?" method="post" enctype="multipart/form-data" onsubmit="bUploaded.start(\'fileprogress\')";>
Fichier vidéo : <input name="file" type="file"/>
<input name="token" type="hidden" value="'. $tokenValue .'"/>
<input type="hidden "value="Envoyer la vidéo" type="submit"/>
</form>';
echo('Token Value : '. $tokenValue);
// la variable $tokenValue n'existe que dans le fichier upload_form.php
echo'<object width="550" height="200" data="flash_uploader.swf?varget='.$tokenValue.'" type="application/x-shockwave-flash">';
echo'<param name="id" value="as3" />';
echo'<param name="align" value="middle" />';
echo'<param name="allowScriptAccess" value="never" />';
echo'<param name="allowFullScreen" value="false" />';
echo'<param name="quality" value="high" />';
echo'<param name="bgcolor" value="#ffffff" />';
echo'<param name="src" value="flash_uploader.swf?varget='.$tokenValue.'" />';
echo'<param name="name" value="as3" />';
echo'<param name="wmode" value="window" />';
echo'<param name="allowfullscreen" value="false" />';
echo'</object>';
}
Ce script fait donc appel au flv "flash_uploader.swf?+TOKEN VALUE" - la variable passe bien dans Actionscript puisque je l'affiche dans un champ texte et le token s'affiche bien.
Dans le code AS3 j'ai donc parmis le code de mon uploader, une fonction qui execute un fichier php :
function Uploader(){
req = new URLRequest();
tf.appendText('TOKENVALUE ' + valueStr);
[#red] req.url = ( stage.loaderInfo.parameters.f )? stage.loaderInfo.parameters.f : 'upload.php?token='+valueStr;[/#]
file = new FileReference();
setup( file );
select_btn.addEventListener( MouseEvent.CLICK, browse );
progress_mc.bar.scaleX = 0;
tm = new Timer( 1000 );
tm.addEventListener( TimerEvent.TIMER, updateSpeed );
cancel_btn.addEventListener( MouseEvent.CLICK, cancelUpload );
cancel_btn.visible = false;
}
Modifié par vallsymachinant (07 Jun 2011 - 10:56)