8. OAuth, CakePHP y YouTube

¿Qué es OAuth?

La autenticación OAuth es el proceso mediante el que los usuarios de nuestra aplicación CakePHP conceden acceso a sus recursos protegidos de YouTube sin compartir sus credenciales con nosotros. Gracias a este protocolo, los programas pueden acceder a través de una API a los recursos protegidos que sus usuarios tienen en otros sitios.

Funcionamiento de OAuth desde el punto de vista del usuario

Supongamos, por ejemplo, que nuestro sitio CakePHP, http://www.fotosyvideos.com, accede a las fotos que tienen sus usuarios en http://www.flickr.com, o a los vídeos que tienen en http://www.youtube.com. Con OAuth los usuarios no tienen que darnos sus credenciales, mientras que sin un protocolo como este el programa pediría el login y password para poder acceder a los datos protegidos proporcionados por Flickr o YouTube.

Todo esto se traduce en más seguridad. Como explica la Guía OAuth para principiantes, dar nuestro nombre de usuario y contraseña a un sitio web para que obtenga de otro sitio web nuestra lista de contactos, es lo mismo que ir a cenar y dar nuestro código al camarero en el momento de pagar con la tarjeta. Ciertamente, los usuarios se arriesgan cuando comparten su información privada con otros sitios o personas. Todo esto y más lo explica muy bien el sitio oficial de OAuth (en inglés).

En resumen, este post presenta el protocolo OAuth, gracias al cual las aplicaciones de escritorio, móviles y web interactúan de forma segura con datos protegidos. Hemos descubierto que este protocolo permite autorizaciones API de forma sencilla, abierta, estándar y segura. Finalmente, al preguntarnos por el funcionamiento de OAuth desde el punto de vista del usuario, hemos visto que es seguro porque éstos no tienen que darnos sus credenciales.

Información de OAuth en español aquí:

http://www.error500.net/oauth-identificacion-abierta

http://www.econectados.com/2007/10/oauth-protocolo-de-autentificacion-segura-para-apis/

http://www.lacofa.es/index.php/tecnologias/futuro-de-internet/oauth-primer-paso-hacia-el-control-de-la-informacion-de-personalizacion

http://www.webmasterlibre.com/2008/06/30/oauth-autenticacion-segura-para-apis/

Anuncios

7. Servicios Web en Internet y algo más sobre REST

Google nos explica en qué consiste la tecnología REST:

Otras explicaciones muy buenas sobre este tema: una es es de Nokrosis y el enlace es este; también adjunto este artículo, Servicios Web con PHP, de www.malditainternet.com.

6. He descubierto que el API de YouTube es REST

“Una interfaz de programación de aplicaciones o API (del inglés Application Programming Interface) es el conjunto de funciones y procedimientos (o métodos si se refiere a programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción”.

– Wikipedia. La enciclopedia libre

Según esta definición, como la entendía antes de descubrir las APIs Web, me preguntaba lo siguiente: ¿Dónde están las funciones y los procedimientos cuando armo un listado de vídeos de YouTube?, ¿dónde están estas funciones cuando obtengo un Google Maps?

Roy Thomas Fielding y REST

Roy Thomas Fielding es uno de los principales autores de la especificación HTTP (RFC 2616) y obtuvo su doctorado hace nueve años, en 2000, en la Universidad de California, con su tesis Estilos Arquitecturales y el Diseño de Arquitecturas Software basadas en Red. En este trabajo, Fielding presenta la Transferencia de Estado Representacional, o REST (Representational State Transfer).

Para qué sirve REST

Actualmente, el término REST hace referencia a un enfoque para desarrollar y proporcionar servicios web y es una alternativa a los servicios web SOAP. No tengo ninguna experiencia en SOAP y hablaré poco de él para no meter mucho la pata.

Por lo que creo haber entendido, hay muchas diferencias en el funcionamiento de estas dos tecnologías. Por ejemplo, con SOAP, que se basa en RPC, tenemos un conjunto de métodos que hacen algo, mientras que en REST los que hacen algo son los recursos, identificados por un URL.

Qué es un servicio web

Según el W3C: “Un conjunto de aplicaciones o tecnologías con capacidad para interoperar en la Web. Estas aplicaciones o tecnologías intercambian datos entre sí con el objetivo de ofrecer unos servicios. Los proveedores ofrecen sus servicios como procedimientos remotos y los usuarios solicitan un servicio llamando a estos procedimientos a través de la Web“.

Cómo funcionan las APIs basadas en REST

Bueno, pues las funciones o métodos que yo buscaba ¡son los URL! Si en RPC teníamos métodos como getUser(), addUser() o removeUser(), ahora, en REST, tenemos recursos identificados con URLs. Como explica muy bien la Wikipedia:  “Los clientes trabajan con estos recursos a través de las operaciones estándar de HTTP, como GET para descargar una copia del recurso“.

Más concretamente, esto es lo que se hace aquí, por ejemplo, cuando le pedimos al geocodificador de Google que nos mande un mapa. Esto es lo que hicimos, también, aquí, cuando le pedimos a YouTube que nos mandara un listado con los vídeos más vistos. En ambos casos, la respuesta que recibimos de este recurso es un XML, aunque esto se puede parametrizar en el URL de consulta para que sea, por ejemplo, otra, como JSON.

¿Entonces, qué es el API de YouTube?

No hace mucho, algunas compañías comenzaron a liberar sus APIs: Amazon, Yahoo!, Google, etc. En otras palabras, expusieron sus servicios web en forma de recursos REST, a través de un URL, para que los consumidores de estos servicios (los programadores) pudieran acceder a este procesamiento a través del protocolo HTTP.  El API de YouTube es, pues, un servicio web basado en REST.

Dónde está REST

¿Recuerdas que estos días descubrimos el funcionamiento de los blogs y de los feeds RSS, gracias al videotutorial RSS hablando en plata? ¡Pues resulta que la tecnología que hay detrás de ellos es REST! Ciertamente, los lectores de feeds consultan un URL, el del feed, que devuelve un XML.

Hasta otra

Espero que este post te haya gustado y lo encuentres útil. Ya conocemos un poco mejor qué es esto que andamos tocando (¡APIs REST!) y cómo utilizarlas, que es de lo que se trata; si encuentras algún fallo, ¡deja aquí algún comentario!

Más información de todo este asunto aquí…

http://es.wikipedia.org/wiki/Representational_State_Transfer

http://www.ibm.com/developerworks/xml/library/x-youtubeapi/

http://phpwebservices.blogspot.com/2008/01/rest-with-php_20.html

www.di.uniovi.es/~cueva/asignaturas/doctorado/2006/trabajos/Ponencia%20REST.pdf

http://es.wikipedia.org/wiki/Roy_Fielding

http://www.sematopia.com/?p=153

5. Listado de YouTube con SimpleXML.

En este post explicaremos cómo obtener un listado de los vídeos más vistos de YouTube desde PHP.

He armado un listado con las cuestiones que creo que hay que tener claras para hacer esto:

1. ¿Qué es el API de datos de YouTube y cómo se utiliza?

2. ¿Cómo obtengo el listado de los vídeos más vistos de YouTube?

3. ¿Cómo manipulo desde PHP el resultado obtenido?

Y estas las respuestas:

1. ¿Qué es el API de datos de YouTube y cómo se utiliza?

Pues no lo sé. Por una parte, según la Wikipedia: “Una interfaz de programación de aplicaciones o API (del inglés Application Programming Interface) es el conjunto de funciones y procedimientos (o métodos si se refiere a programación orientada a objetos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción”. Mientras que, por otra, según Google: “Las API de datos de Google (“Google Data” abreviado) constituyen un sencillo protocolo estándar para leer e introducir datos en la Web”.

Como hasta hace poco mi idea de API era como la de la Wikipedia; es decir, algo así como un conjunto de llamadas a funciones o métodos ya programados, me he despistado un poco tras leer la definición del API de Google: “un sencillo protocolo estándar para leer e introducir datos en la Web”.

Supongo que, en realidad, viene a ser lo mismo, y al API de Google se le llama API porque hacemos llamadas a URLs que devuelven feeds en formato RSS o Atom, en vez de hacer llamadas a funciones o métodos ya programados. En cualquier caso, como explica el documento Protocol Basics de Google, podemos utilizar las API Google así: haciendo una petición HTTP a un servicio, a través de un URL con unos parámetros específicos.

De hecho, esto ya lo hemos hecho: en el artículo Geocodificación con PHP y el API Google Maps (3), de Quentin Zervaas (www.phpriot.com), hacíamos una petición HTTP al URL http://maps.google.com/maps/geo, especificando los parámetros q, key y output. También vimos esto en 2. cURL y su sintaxis, pero a lo griego, cuando usábamos cURL para obtener la respuesta del servicio de Google.

Resumiendo, si para Google Maps hacíamos una llamada al URL http://maps.google.com/maps/geo, ahora, para obtener un listado de los vídeos más vistos de YouTube, usaremos el URL http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed. Esta vez, sin embargo, la respuesta no es una dirección; sino un archivo XML en formato Atom.

2. ¿Cómo obtengo el listado de los vídeos más recientes de YouTube?

Con una llamada a http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed

3. ¿Cómo manipulo desde PHP el resultado obtenido?

Con SimpleXML, por ejemplo.

Ejemplo

Más concretamente, podemos armar un controlador como este:

 

class YoutubeController extends AppController{
var $name = 'Youtube';
var $uses = array();
function masVistos(){
   $apiURL = "<a href="http://gdata.youtube.com/feeds/api/standardfeeds/most_viewed">
   $ch = curl_init();
   $timeout = 0;
   curl_setopt($ch, CURLOPT_URL, $apiURL);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
   $respuestaYoutube = curl_exec($ch);
   curl_close($ch);
   $feedAtom = new SimpleXMLElement($respuestaYoutube);
   $this->set('feedAtom',$feedAtom);
   }
}

Con su vista asociada, para mostrar por pantalla los vídeos más vistos:


   echo '
<h3>Los videos más vistos son...</h3>
';
   foreach ($feedAtom->entry as $entry){
      echo $entry->title.'
';
   }

Obtenemos así un listado con los vídeos más vistos de YouTube:

Los videos más vistos son…

Avril Lavigne – Girlfriend
Evolution of Dance
Chris Brown – With You
Rihanna – Don’t Stop The Music
Leona Lewis – Bleeding Love
Jeff Dunham – Achmed the Dead Terrorist
Lezberado: Revenge Fantasies
Charlie bit my finger – again !
Alicia Keys – No One
Hahaha
Timbaland – Apologize (feat. One Republic)
Chris Brown;Chris Brown featuring T-Pain – Kiss Kiss
Miley Cyrus – 7 Things – Official Music Video (HQ)
Akon – “Don’t Matter”
Potter Puppet Pals in “The Mysterious Ticking Noise”
Timbaland – The Way I Are OFFICIAL MUSIC VIDEO
Jonas Brothers – SOS Music Video – Official (HQ)
Oral
Crank Dat Soulja Boy Spongebob
guitar
Jonas Brothers – Burnin’ Up – Official Music Video (HQ)
High School Musical
Sean Kingston – Beautiful Girls
Vanessa Hudgens Say Ok Music Video (Official with Zac Efron)
Soulja Boy Tell`em – Crank That (Soulja Boy)

4. XML y la sindicación de contenidos web. RSS y Atom.

El documento que me quitaba el sueño, la Guía del desarrollador, protocolo de API de datos, supone que hemos leído y entendido el documento Aspectos generales de las API de datos de Google. ¿Qué te parece si en esta categoría, YouTube y CakePHP, profundizamos en el funcionamiento de las API de datos de Google? (La traducción al español del artículo de Quentin Zervaas, Geocodificación con PHP y el API Google Maps, ya explica cómo trabajar con Google Maps).

Una de las cosas más importantes es que estas API se basan en los formatos de sindicación estándar Atom y RSS. El siguiente video divulgativo, de los que a mí me gustan, RSS hablando en plata, explica qué es la sindicación de contenidos. El video original es RSS in plain english y http://dfwikilabs.org lo ha doblado al español.

 

3. A mi ritmo, que me agobio. ¡Algo de música!, que aquí hay mucha chicha.

“Querido Goldberg, toca una de mis variaciones”, decía el conde Keyserlingk a su clavicordista, Johann Gottlieb Goldberg, en sus noches de insomnio. En efecto, según Johann Nikolaus Forkel, biógrafo de Johann Sebastian Bach, “El conde estaba enfermo a menudo y tenía noches de insomnio. Estas veces, Goldberg, que vivía en su casa, tenía que pasar las noches en una antesala y tocar para él”.

Pobres Keyserlingk y Goldberg, ¿no? Que bien que actualmente tenemos el YouTube y los reproductores de música digitales.

*Glenn Gould interpretando a Bach

¿A qué viene todo esto? Bueno, pues resulta que con este tema de los vídeos de YouTube y CakePHP he ido a parar a la guía del desarrollador del API de datos de YouTube, me he agobiado y he perdido el sueño. Guía del desarrollador: protocolo de API de datos: ¡20812 palabras!

Mmmm… Esto quiere decir que si es cierto lo que dice la Wikipedia y una persona normal, relajada, puede leer alrededor de 25o palabras por minuto, se necesitan, más o menos, 83 minutos para leerlo. Todo esto, claro, suponiendo que se trata de un documento de texto normal (y no hipertexto), no se descansa y se entienden todas las palabras. De todas formas, creo que hay un problema con las palabrejas que vagamente me suenan, pero que en realidad no sé qué son y no entiendo cómo funcionan: RSS, Atom, X-GData-Key, AuthSub, ClientLogin, APP, etc. ¡Puf! Se me trabó la leunag.

aplauso1

Voy a salir de este estado hipnótico y me voy a poner las pilas con todo esto, así que dejaré de escribir en el blog durante esta semana. Esta vez a mí no me la dan con queso: 83 minutos para leer el documento, ¡tu tía!

bach011

2. Crear un reproductor de YouTube personalizado

¡La guía de iniciación de Google code está muy bien! Esta guía presenta las opciones disponibles para “traer la experiencia YouTube a nuestro sitio web”. En resumen, de acuerdo a tu experiencia (básica, media o avanzada) puedes utilizar varias herramientas y APIs.

Como se trata de mi primer acercamiento, he seguido las indicaciones para crear un reproductor de YouTube personalizado, que, por lo visto, es de lo más sencillo que hay. La ventaja principal que tiene esta opción es que no se necesitan conocimientos de programación; por lo tanto, uno puede cambiar la apariencia y contenido del reproductor desde la opción Reproductores de vídeo personalizados de su cuenta YouTube.

Para crear un reproductor personalizado de YouTube, uno tiene que entrar en su cuenta y hacer clic en el enlace Cuenta de la parte superior derecha de la pantalla. A continuación, hay que hacer clic en el enlace Reproductores de vídeo personalizados, dentro de la Descripción General. Haciendo esto, se accede a la pantalla Nuevo reproductor personalizado, desde la que se controlan opciones como el color, diseño y contenido del reproductor.

Después de dejar el reproductor como queremos, generamos (automáticamente) el código y lo guardamos. Finalmente, YouTube nos presenta el código de inserción, que debemos copiar y pegar en nuestro sitio web.

Si ahora clicamos en el enlace Reproductores de vídeo personalizados, dentro de la Descripción General, y si todo ha ido bien, tiene que aparecer el reproductor que acabamos de crear.

youtubeplayer

El código de mi reproductor es algo parecido a este:

<object width=”416″ height=”337″><param name=”movie” value=”http://www.youtube.com/cp/nmMNa7LLmKO8uoiGf0Lz21-lkMI12tPgfdu3pWr-ASD=”></param><embed src=”http://www.youtube.com/cp/nmMNa7LLmKO8uoiGf0Lz21-lkMI12tPgfdu3pWr-ASD=&#8221; type=”application/x-shockwave-flash” width=”416″ height=”337″></embed></object>