Inauguramos nuestro blog hace poco. Y queremos enfocarnos en las conocidas APIs (y muchos temas mas, claro) pero este es un sector que viene en aumento… y es difícil encontrar documentación al respecto (en nuestro idioma).
Bueno, entonces empezaremos con nuestro primer curso.
Utilizando la API de YouTube. Parte 1
Tema: Como subir videos con la Api de YouTube.
Espero no empezar con material muy pesado, pero he buscado esta información por todo lado y no encuentro nada. Ojala les sirva.
Requisitos:
- PHP 5.1.4
- La librería de Zend Framework (viene con demos)
- Developer Key que se puede obtener aqui
- Cuenta de Youtube
La estructura de los archivos es sencilla (un archivo y una carpeta)
- index.php
- Zend (esta carpeta viene en el comprimido de arriba y es la librería)
Abrimos nuestro index.php y digitamos: (no se te olvide la etiquetas de php al inicio y final del archivo)
[cc lang="php" tab_size="2" lines="40"]
require_once ‘Zend/Loader.php’; // Esta es la ruta del archivo loader.php que esta en la carpeta Zend
Zend_Loader::loadClass(‘Zend_Gdata_AuthSub’);
Zend_Loader::loadClass(‘Zend_Gdata_ClientLogin’);
Zend_Loader::loadClass(‘Zend_Gdata_YouTube’);
[/cc]
Revisemos linea por linea.
En la primera incluimos la libreria de Zend, en las siguientes 3 creamos una clase AuthSub, ClientLogin y claro la de Youtube.
[cc lang="php" tab_size="2" lines="40"]
$authenticationURL= ‘https://www.google.com/youtube/accounts/ClientLogin’;
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username = ‘SU USUARIO@gmail.com’,
$password = ‘SU PASSWORD’,
$service = ‘youtube’,
$client = null,
$source = ‘MiYoutube’, // un nombre para identificar la aplicacion
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
$millave = ‘LA LLAVE o DEVELOPER KEY’;
$httpClient->setHeaders(‘X-GData-Key’, “key=${millave}”);
$yt = new Zend_Gdata_YouTube($httpClient);
[/cc]
$authenticationURL es la direccion donde vamos a enviar los datos que siguen (No cambiar)
Guardamos en $httpClient en valor de la función getHttpClient de la clase que definimos anteriormente ClientLogin, a la cual le enviamos 8 variables de la que debemos cambiar estas:
$username es la cuenta de correo que tenemos ligada con nuestra cuenta de youtube (en este caso debe ser de Gmail, mas adelante enseñaré con otras cuentas)
$password el password de la cuenta
$source es un nombre para identificar la aplicación.
Colocamos nuestra Llave, la pasamos como cabecera a nuestro elemento $httpClient
Después creamos el objeto $yt que es una clase de Youtube con el parametro $httpClient.
Hasta aqui nuestro script funciona para lo que es la Autentificacion en Youtube.
Vamos a subir un video, ya que estamos “logeados” a nuestra cuenta.
[cc lang="php" tab_size="2" lines="40"]
// Creamos una clase para la entrada del video
$miVideo= new Zend_Gdata_YouTube_VideoEntry();
// Creamos un objeto media group
$mediaGroup = $yt->newMediaGroup();
$mediaGroup->title = $yt->newMediaTitle()->setText(‘Video subido con la API’);
$mediaGroup->description = $yt->newMediaDescription()->setText(‘Mi primer video subido con la Api de Youtube. Curso del manejo de la API por Avenidanet’);
// Descarga el archivo que contiene los tags de youtube
$categoryScheme = ‘http://gdata.youtube.com/schemas/2007/categories.cat’;
$mediaGroup->category = array(
$yt->newMediaCategory()->setText(‘Tech’)->setScheme($categoryScheme),
);
// agregamos los tags
$mediaGroup->keywords = $yt->newMediaKeywords()->setText(‘Avenidanet, prueba, api’);
$miVideo->mediaGroup = $mediaGroup;
[/cc]
En el codigo anterior lo que vamos hacer es crear una clase VideoEntry (que es los datos del video) y le agregamos la características con el objeto MediaGroup
Vemos que podemos agregar:
- el titulo en $mediaGroup->title = $yt->newMediaTitle()->setText(‘Video subido con la API’);
- la descripción en $mediaGroup->description = $yt->newMediaDescription()->setText(‘Mi primer video subido con la Api de Youtube. Curso del manejo de la API por Avenidanet’);
- la categoría donde vamos a guardarlo en este caso Tech o tecnologia, se tomo como referencia del archivo http://gdata.youtube.com/schemas/2007/categories.cat donde vienen las etiquetas.
- y los tags en $mediaGroup->keywords = $yt->newMediaKeywords()->setText(‘Avenidanet, prueba, api’); tiene que estar separados con (,) coma y no contener espacios
- Por ultimo agregamos mediagroup a mivideo
[cc lang="php" tab_size="2" lines="40"]
$tokenHandlerUrl = ‘http://gdata.youtube.com/action/GetUploadToken’;
$tokenArray = $yt->getFormUploadToken($miVideo, $tokenHandlerUrl);
$clave= $tokenArray['token'];
$enviarloa = $tokenArray['url'];
//Este es el archivo que recibe la repuesta, mas adelante aprenderemos a leer esos datos
$devuelta = ‘http://www.mipagina.com/videossubidos.php’;
[/cc]
Lo anterior es el proceso para tomar la dirección de donde debemos enviar nuestro video en la variable $enviarloa con un token en $clave y adonde vamos a recibir la respuesta de como nos fue y el ID del video (si, ese que vemos en la url de youtube http://www.youtube.com/watch?v=yzUUJdMSL88).
Resumen:
- Ya nos “logeamos” en YouTube
- Tenemos la descripción de nuestro video en $miVideo (titulo, descripcion, etiqueta y tags) que utilizamos para generar la dirección donde enviarlo y token
- Sabemos donde enviarlo en $enviarloa y un token en $clave
- y donde recibiremos la repuesta $devuelta
- Que nos falta..
Claro, enviar el video… Facil creamos un formulario donde el usuario o nosotros busquemos un video de nuestro disco duro.
[cc lang="php" tab_size="2" lines="40"]
// Contruimos el formulario
//Y introducimos los datos anteriores
$form = ‘
‘
‘.
‘
‘.
‘
‘;
//Mostramos el formulario
echo $form;
[/cc]
Sencillo, verdad… No te olvides del multipart/form-data, en el formulario, espera la siguiente clase…
Descarga | Ejercicio 1
Como subir videos con la Api de YouTube (I)…
Quieres subir vídeos desde tu web, revisa este manual te servirá. Ademas que te enseñan a utilizar la famosa API de Youtube de una forma muy sencilla….
Escrito por meneame.net a las mayo 28th, 2008.
[...] Como subir videos con la API de YouTube [...]
Escrito por Utilizando la API de YouTube | AvenidaNet Blog a las junio 5th, 2008.
Hola, disculpa, como lo aplico en Joomla??
Escrito por Santiago a las julio 3rd, 2008.
Santiago, no acostumbro a usar Joomla desde hace mucho tiempo. Pero voy a ver si te encuentro algo
Escrito por admin a las julio 4th, 2008.
Gracias, la verdad esta muy util el manual, pero de verdad quisiera saber como aplicarlo en Joomla, si desde el index.php o desde donde??
Gracias desde ya
Escrito por Santiago a las julio 6th, 2008.
Hola,
Para Santiago, en Joomla se debe hacer un componente y/o modulo ( las famosas extensiones ) que no es muy dificil, solo debes seguir ciertas reglas y se hace. Yo lo haria porque necesito algo así, el problema es que no me funciono este ejemplo; aquí les dejo el error para ver si alguien me puede explicar que problema tengo para corregirlo:
Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /home/xxx/public_html/zend/index.php on line 39
Saludos
Escrito por Edgar a las julio 17th, 2008.
Hola de nuevo, ya se porque era, estaba en una version antigua de PHP sin darme cuenta :p
bueno, ahora ya lo puse en php5 y “funciona” pero da otro error:
Fatal error: Uncaught exception ‘Zend_Gdata_App_HttpException’ with message ‘Expected response code 200, got 403′ in /home/inter/public_html/zend/Zend/Gdata/App.php:468 Stack trace: #0 /home/inter/public_html/zend/Zend/Gdata/YouTube.php(520): Zend_Gdata_App->post(Object(Zend_Gdata_YouTube_VideoEntry), ‘http://gdata.yo…‘) #1 /home/inter/public_html/zend/index2.php(45): Zend_Gdata_YouTube->getFormUploadToken(Object(Zend_Gdata_YouTube_VideoEntry), ‘http://gdata.yo…‘) #2 {main} thrown in /home/inter/public_html/zend/Zend/Gdata/App.php on line 468
seguramente por ahí falta algun paso por hacer, a ver si alguien me dice que pasa.
Saludos.
Escrito por Edgar a las julio 18th, 2008.
Hola, me sale un error parecido… Ch…. como sera para implementarlo en Joomla…Alguien??? HELP!!!!!!!!
Escrito por Santiago a las julio 18th, 2008.
Hola Santiago,
ya me salió el ejemplo de aquí, es muy fácil, después me paso para explicarte como lo hice y dejarte un link al modulo Joomla ( o lo que haga ) para que lo bajes, bueno y a todo el que lo quiera.
Saludos.
Escrito por Edgar a las julio 21st, 2008.
en serio te salio??
Pasame el link por favor para ver como lo hiciste…
Escrito por santiago a las julio 23rd, 2008.
Hola Santiago,
Si, ya lo tengo, pero lo primero que debes hacer es bajarte la version “buena del Zend Framework”, porque creo que es el problema, el Script de aquí funciona correctamente, yo me baje el Framework de la web de Zend y estaba mal o algo así leí por ahí, despues con el SmartSVN te descargas el Zend Framework que no se porque pero con ese se baja bien.
Pasate por mi web que te linkea desde mi nombre aqui en el mensaje y me mandas tu correo desde el formulario de contacto y ya nos ponemos en contacto para pasarte el “Framework Bueno” y el componente para Joomla.
Después voy a postear aquí el componente para el que le interese
Saludos.
Escrito por Edgar a las julio 24th, 2008.
Hola admin, me sirvio de mucho tu guia para subir videos y te lo agradezco, ahora, sabes de alguna forma como se hace para borrar videos utilizando esta api? muchas gracias por tu respuesta. cualquier cosa deje mi email. gracias.-
Escrito por diego a las julio 27th, 2008.
Hola Edgar, creo q es por el Zend mismo, xfa enviame el Framework q si vale y el componente a mi correo para revisarlo, ya q yo estaba trabajando directamente desde el index.php de la plantilla del sitio…
Escrito por Santiago a las agosto 4th, 2008.
Y cual es tu correo Santiago?
aun me falta arreglar alguillo del componente pero ya funciona lo básico, no tiene parte de administrador así que tendras que descomprimirlo y editarlo tu mismo.
mandame tu correo que no soy adivino :p
Escrito por Edgar a las agosto 5th, 2008.
Hola, tengo el mismo error que Edgard!
Fatal error: Uncaught exception ‘Zend_Gdata_App_HttpException’ with message ‘Expected response code 200, got 403′ i
alguien conoce la solucion?
Escrito por Juan Pablo a las agosto 6th, 2008.
Listo!
El problema es que no estaba colocando la dev key correcta!
Escrito por Juan Pablo a las agosto 6th, 2008.
Funciona el upload de archivo, y luego recojo las variables que recibo en la pagina de retorno. Pero, al copiar el id del video que me regresa, y luego intento buscarlo en youtube, dice un mensaje “Este vídeo no está disponible”. Como puedo acceder al video luego de subirlo?
Escrito por frandy a las agosto 13th, 2008.
hola tengo problemas con subir videos. me pueden pasar el framework bueno. u otro ejemplo para descargar ya hecha. es que soy bien pollaso
Escrito por pacootaku a las diciembre 12th, 2008.
gracias!! funciona perfecto!!
hay alguna posibilidad de ocultar la direccion a la que se sube? quiero decir que cuando estoy subiendo dice en la barra de estado: enviando peticion a youtube.com etc
Escrito por orlando a las enero 13th, 2009.
es posible crear un archivo llamado borrar.php para borrar el archivo subido, pasandole el codigo del video? (Xsf3423d)??
Escrito por orlando a las enero 13th, 2009.
Lo de la direccion me parece que no ya que el servicio lo estas tomando (sea la forma) de youtube. Es como tomar una imagen de Flickr y que no aprezca el origen.
Escrito por admin a las enero 31st, 2009.
Es posible conectar a un tipo de evento que te vaya diciendo el porcentaje de subida?
Más que nada, para poder hacer que el usuario visualize de una manera más gráfica el upload.
thks.
Escrito por _Sergei a las marzo 16th, 2009.
Hola es que tengo una duda, logro subir el video y todo pero quiero recuperar el id de este video subido como se puede hacer. ?????????????????????
Gracias.
Escrito por Dalbayo a las marzo 29th, 2009.
Encontre una clase que permite subir videos sin tener que pasar por 2 formularios, ademas puedes eliminar, obtener datos, sacar imagenes de los videos muy buena
Descargala aqui
http://www.codigoendesarrollo.com/subiendo-videos-a-youtube-con-php-zendtube-y-api-youtube/2009/03/20/
Saludos espero les sea de ayuda!
Escrito por Julian a las marzo 31st, 2009.
Muchas gracias por este ejemplo me ha venido de perlas, pero solo una pregunta , como puedo subir el vídeo para que pase a privado.
Un Saludo y mil gracias
Escrito por Sudor Akrilico a las agosto 3rd, 2009.
hola no se como subir un video en mi email. es para mi novio me pueden decir como le ago xfa
Escrito por lupita a las marzo 9th, 2010.
To upload videos as private, use the $myVideoEntry->setVideoPrivate(); method before starting the upload. You can also use the $videoEntry->isVideoPrivate() method to check whether a video entry is a private video.
De la docu de Google.
Escrito por esteve a las abril 16th, 2010.
Hola, por favor puedes colocar el .zip de nuevo, no está disponible.
Muchas gracias
Escrito por Mila a las mayo 3rd, 2010.
hola buenas dias
quisiera que alguien me ayude como utiliza para generar la dirección donde enviarlo y token de youtube gracias
Escrito por edgar a las mayo 11th, 2010.
hola por favor si me podrias ayudar tendras el link de descarga no funciona nose si me lo puedes enviar a mi msn te estare muy agradecido he hecho todo los pasos que mencionas pero no me esta funcionando
Y POR FAVOR SACAME DE DUDAS TODO EL CODIGO ESCRITO AHI VA EN EL INDEX.PHP?
Escrito por julio a las mayo 13th, 2010.
hola por favor podrias poner de nuevo el link de descarga o mandarlo a mi correo.
me servira mucho
gracias
Escrito por patricia a las agosto 16th, 2010.
Hola, estoy ahora programando para poder subir un vídeo a youtube desde la administración de vídeos de mi pagina web y estoy teniendo problemas. Veo que controlas así que si pudiese ayudarme te lo agradecería.
Yo estoy utilizando la subida directa. Tengo instalado el Zend, la versión correcta de php…
Este es mi código:
//LOGIN
Zend_Loader::loadClass(‘Zend_Gdata_ClientLogin’);
$authenticationURL= ‘https://www.google.com/youtube/accounts/ClientLogin';
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
$username = $usuario,
$password = $clave’,
$service = ‘youtube’,
$client = null,
$source = ‘MySource’,
$loginToken = null,
$loginCaptcha = null,
$authenticationURL);
$myDeveloperKey = $key;
$httpClient->setHeaders(‘X-GData-Key’, “key=${myDeveloperKey}”);
$this->youtube = new Zend_Gdata_YouTube($httpClient);
//SUBIDA
// create a new Zend_Gdata_YouTube_VideoEntry object
$myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
$archivo = $ruta.$fichero;
// create a new Zend_Gdata_App_MediaFileSource object
$filesource = $this->youtube->newMediaFileSource($archivo);
$filesource->setContentType($tipo);
// set slug header
$filesource->setSlug($archivo);
// add the filesource to the video entry
$myVideoEntry->setMediaSource($filesource);
$myVideoEntry->setVideoPrivate(‘false’)
// create a new Zend_Gdata_YouTube_MediaGroup object
$mediaGroup = $this->youtube->newMediaGroup();
$mediaGroup->title = $this->youtube->newMediaTitle()->setText(‘My Test Movie’);
$mediaGroup->description = $this->youtube->newMediaDescription()->setText(‘My description’);
//conectamos apra ver si se aprueban las tegorias enviadas
$categoryScheme = ‘http://gdata.youtube.com/schemas/2007/categories.cat';
$developerTagScheme = ‘http://gdata.youtube.com/schemas/2007/developertags.cat';
$mediaGroup->category = array( $this->youtube->newMediaCategory()->setText(‘Auto’)->setScheme($categoryScheme),
$this->youtube->newMediaCategory()->setText(‘mydevelopertag’)->setScheme($developerTagScheme),
$this->youtube->newMediaCategory()->setText(‘anotherdevelopertag’)->setScheme($developerTagScheme)
);
// set keywords
$mediaGroup->keywords = $service->newMediaKeywords()->setText(‘cars, funny’);
$myVideoEntry->mediaGroup = $mediaGroup;
// upload URL for the currently authenticated user
$uploadUrl = ‘http://uploads.gdata.youtube.com/feeds/users/default/uploads';
try {
$newEntry = $this->youtube->insertEntry($myVideoEntry, $uploadUrl, ‘Zend_Gdata_YouTube_VideoEntry’);
} catch (Zend_Gdata_App_Exception $e) {
echo $e->getMessage();
}
//ERROR
Expected response code 200, got 400 yt:validationrequiredmedia:group/media:category[@scheme='http://gdata.youtube.com/schemas/2007/categories.cat']/text()yt:validationrequiredmedia:group/media:title/text()
Sabrías decirme donde estoy metiendo la pata??? muchas gracias
Escrito por Mari Carmen a las diciembre 27th, 2010.
hola necsito ayuda en esto. ya puedo subir el video desde mi web pero quiero que automaticamente lo meta a favoritos como puedo hacer esto.
gracias
Escrito por giovani a las marzo 8th, 2011.
Hola, puedes enviarme el index.php?? es que no aparece la descarga disponible.
Escrito por Diego Sanchez a las abril 7th, 2011.
Hola. Pués a mi me da muchos errores con los diferentes php que tiene el zehnd. Me parece que este tutorial está un poco desfasado. ¿ alguien tiene algún código para subir los videos desde la propia web de uno ? gracias
Escrito por antonio a las mayo 1st, 2011.
Hey men buena por el tutorial, acabas de salvarme el pellejo en ka empresa jejejejeje
Escrito por Jorge a las mayo 5th, 2011.
El código funciona bien pero… ¿hay alguna forma de utilizarlo con ajax o jquery y que mientras suba el archivo te muestre una barra de proceso? de esta forma el usuario sabría cuánto falta ya que la subida puede llegar a durar unos minutos.
Yo he probado con uploadify pero creo que no funciona con zend, sólo directamente con move_uploaded_file
Ayuda!!!
Escrito por David a las mayo 16th, 2011.
Hola, donde puedo descargar el archivo de ejemplo, ya que no me saca error, pero que elementos debe llevar el formulario para seleccionar el archivo de mi disco duro
Escrito por Jaime Melendez a las julio 13th, 2011.
hola, podrian pasarme el codigo completo? ya q no esta para descargar el ejercicio, necesitaria el php full, gracias.
Escrito por mariano a las noviembre 24th, 2011.