Tenía ganas de escribir algo de javascript pero nunca había surgido la ocasión, y surgió, una duda de un amigo que necesitaba tener un timeline de twitter en su web para luego mostrarlo de una manera animada, así que pensé que sería una idea interesante investigar la API de twitter y cómo consumirlo vía Javascript para poder dejar una salida limpia e independiente de plugins.
API de Twitter
Lo primero es obtener información de la API de búsqueda de Twitter, para poder buscar los datos que queremos, para ello vamos aqui, donde podemos ver las diferentes maneras de realizar una petición al servicio. En este caso pediremos que el resultado se nos devuelva en formato JSON («Javascript Object Notation»), un formato ligero para intercambio de datos que nos va a venir muy bien para la ocasión.
Nota: asumimos ligero para la máquina, para lectura humana se puede hacer «duro» como puedes ver en http://search.twitter.com/search.json?q=%40rlbisbe
Recibiendo los datos con jQuery
Para este ejemplo me he apoyado en una librería/biblioteca muy conocida que es jQuery, para recibir los datos de una manera sencilla. Creamos una web en blanco y agregamos la referencia a jQuery y al fichero que emplearemos:
<script src="http://code.jquery.com/jquery-1.5.2.min.js" type="text/javascript"></script> <script src="tweets.js" type="text/javascript"></script>
Lo primero es decirle a jQuery cuándo cargar el enlace, para lo cual una buena práctica consiste en esperar a que la web cargue, es decir
$(document).ready(function() {...});
Seguidamente definimos una variable que contendrá el nick del usuario que queremos consultar, y llamamos a la función que procesará esta información, junto con la url de la api de twitter que hemos obtenido antes, revisando la documentación. En este caso nos limitamos a los 5 ultimos tweets:
var twitter_user = 'rlbisbe' $.getJSON( 'http://search.twitter.com/search.json?callback=?&rpp=5&q=from:' + twitter_user, function(data){...});
Esta function(data) que hemos agregado al final es lo que se conoce como un callback, es decir, una función que será ejecutada una vez que el proceso termine (recordemos que javascript se caracteriza por ser asíncrono, es decir, que las funciones no se ejecutan de manera secuencial).
De este objeto data, podemos sacar muchas cosas interesantes, y además, podemos recorrer todos los elementos que hemos obtenido, que son objetos, con propiedades accesibles:
$.each(data.results, function(i, tweet) { if(tweet.text !== undefined) { //Comprobamos que la salida no sea vacía //Creamos un nuevo objeto de tipo fecha para obtener sus datos var date_tweet = new Date(tweet.created_at); var tweet_html; tweet_html = '<div>' //Agregamos el texto y un enlace tweet_html += '<p><b>' + tweet.text + '</b></p><a href="http://www.twitter.com/'; tweet_html += twitter_user + '/status/' + tweet.id_str + '">'; //Agregamos la fecha tweet_html += date_tweet.getDate() + '/' + date_tweet.getMonth() + '/' + date_tweet.getFullYear() + '<\/a>'; tweet_html += '<\/div>'; //Añadimos el texto al contenedor que tenemos $('.tweets').append(tweet_html); } });
Finalmente queda, dentro de nuestro HTML, agregar el código que contendrá todos los elementos que hemos generado, y que tendrá esta forma:
<div class="tweets"></div>
El resultado es el siguiente:
Simple, conciso, y con la gracia de que «lo has hecho tú» :) Quedaría arreglar las fechas, pero para eso os remito a un artículo que os enseñará como personalizarla a vuestro gusto.
El ejemplo completo y funcionando se encuentra disponible para su descarga aquí
Enlaces de interés:
Genial. Muchas gracias!
Muy bueno!
Muchas gracias…! Simple y facil tu explicacion
Te puedo hacer una consulta?
Estoy medio vuelto loco tratando de obtener estos datos en mi aplicación web, pero no encuentro la forma. Obtengo los datos OAuth a través de un servlet y los almaceno en la sesión, eso me funciona, pero luego no se como enviarlos a un json para enviarlos a la api para que me valide los request.
Si hay algún demo por ahi, o un ejemplo, sería de mucha ayuda, no he pillado nada…
Saludos y muchas gracias.