Subir vídeos a YouTube con Zend Gdata – Subir el vídeo

Para finalizar la serie de artículos dedicados a la subida de un vídeo a YouTube desde nuestra aplicación web en PHP (con el módulo Zend_Gdata) vamos a describir el proceso que se debe seguir desde el punto en que lo dejamos en el post anterior.

Una vez recibido el token de YouTube (ver post anterior) deberemos seguir estos pasos:

Upgrade del token recibido a un token de sesión

Para realizar más de una operación con la cuenta del usuario que se ha identificado en la página de YouTube debemos hacer un “upgrade” del token recibido. Para realizar una sola operación no sería necesario hacer este paso pero aquí recomendamos hacerlo para que no surjan problemas a posteriori con la identificación del usuario.

El upgrade del token requiere haber recogido el valor original de token enviado por YouTube a través de la petición. En el siguiente fragmento de código vamos a explicar cómo hacer la actualización del token recibido por un token de sesión presuponiendo que recuperamos el valor del token por GET.
$originalToken = $_GET['token'];
$ytClient = new Zend_Gdata_HttpClient();
$ytClient->setHeaders("X-GData-Key: key=VALOR_DE_TU_CLAVE_DE_DESARROLLADOR");
$ytClient->setAuthSubPrivateKeyFile('/path/a/clave.pem',null, true);
$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken(trim($originalToken),$ytClient);

$ytClient->setAuthSubToken($sessionToken);
En este fragmento de código podemos observar como recuperamos el valor del token por GET y cómo construimos el Zend_Gdata_HttpClient para que la petición de actualizar el token pueda ser satisfecha. En la última instrucción de este fragmento se setea el nuevo token de sesión en el cliente http para que las peticiones posteriores sean ejecutadas con los permisos que se han conseguido con la identificación de este usuario.

La clave de desarrollador y la clave.pem que se utilizan en este trozo de código corresponden a los requisitos previos que comentábamos en el primer post sobre la subida a vídeos a YouTube. Estas claves se incluyen en el cliente http que realizará las consultas a modo de signatura (para la seguridad de las peticiones que se realizarán a YouTube).

Subir el vídeo

Llegados a este punto, la subida del vídeo es la parte más sencilla de todo el proceso. Sólo hace falta seguir al pie de la letra las indicaciones existentes tanto en la documentación del Zend Framework como en la página de la API de YouTube destinada a este propósito para que la operación llegue a buen puerto.

A continuación se detalla el código necesario para la inserción del video a YouTube:
$yt = new Zend_Gdata_YouTube($ytClient);
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$filesource = new Zend_Gdata_App_MediaFileSource('Sample.mov');
$filesource->setContentType('video/quicktime');
$filesource->setSlug('Sample.mov');

$myVideoEntry->setMediaSource($filesource);
$myVideoEntry->setVideoTitle('Prueba de subida a YT');
$myVideoEntry->setVideoDescription('Una descripción');
$myVideoEntry->setVideoCategory('Music'); //La categoría debe ser una categoría válida en YouTube
$myVideoEntry->SetVideoTags('mytest, sample'); //Tags
$myVideoEntry->setVideoDeveloperTags(array('solutions', 'iceberg')); //Tags como desarrollador

//URI estática para realizar las subidas
$uploadUrl = 'http://uploads.gdata.youtube.com/feeds/api/users/default/uploads';

//Bloque try-catch para subir el vídeo
try {
$newEntry = $yt->insertEntry($myVideoEntry, $uploadUrl, 'Zend_Gdata_YouTube_VideoEntry');
} catch (Zend_Gdata_App_HttpException $httpException) {
echo $httpException->getRawResponseBody();
} catch (Zend_Gdata_App_Exception $e) {
echo $e->getMessage();
}

De forma opcional se puede geolocalizar el vídeo que se está subiendo pero esto se puede encontrar de forma sencilla en la documentación de la API de YouTube.

A modo de epílogo sólo comentar que el archivo de vídeo que se utiliza ‘Sample.mov’ debe estar alojado de forma obligatoria en el servidor desde el que se está ejecutando esta operación. YouTube no acepta URLs como input para la subida de vídeos (lo hemos probado con unos enlaces públicos a archivos alojados en Amazon S3 y no ha habido manera).

Espero que toda la información vertida en estos tres artículos haya sido de utilidad, en breve se publicará un meta-post con los enlaces a los tres apuntes relacionados.

5 thoughts on “Subir vídeos a YouTube con Zend Gdata – Subir el vídeo

  1. Hola Xavi, he leído y seguido al pie de la letra este tutorial. Pero llegado al punto de hacer el upgrade del token me da este error:

    Token upgrade failed. Reason:
    Invalid AuthSub header.
    Error 401
    Token invalid – Invalid AuthSub token.

    y no sé dónde puede estar el fallo, espero que me puedas ayudar.

    Un saludo y gracias.

  2. Hola Paco, ¿has añadido el token provisional al header de la petición de upgrade del token?

    Aunque realices la petición de upgrade del token que te acaban de mandar, ésta debe ser segura y, por tanto, debe ir “firmada” con este identificador temporal.

    A ver si los tiros van por ahí y me comentas ;)

  3. Hola Xavi,

    Porto uns dies intentant afegir comentaris i/o votacions amb l’API de YouTube i no ho estic aconseguint. No sé si em podries ajudar… ^_^

    Gràcies!

  4. Doncs no ho se… descriu que estàs utilitzant i potser et puc donar un cop de mà.

    Jo vaig haver de solucionar molts problemes amb la identificació però el tema votacions/comentaris no el vaig tocar directament

    Salut!

  5. Jajaja… H sigut deixar el comentari en el teu bloc i “veure la llum”. Ja ho he pogut solucionar. Té molta gràcia que la guia oficial (http://tinyurl.com/35twuwj) et posi un codi en castellà i un codi diferent en anglès. Al final entre l’un i l’altre n’ha sortit un que funciona… :P

Leave a Reply

Your email address will not be published. Required fields are marked *