Trabajando con la API de Twitter desde PHP
Desde su lanzamiento a mediados de 2006, Twitter ha crecido muchísimo siendo el sitio de microblogging más popular. Mucha gente está desarrollando Aplicaciones y Mashups gracias a la API de Twittter, acá te damos una guía para que tú también puedas hacerlo.
Desde su lanzamiento a mediados de 2006, Twitter ha crecido muchísimo siendo el sitio de microblogging más popular. Mucha gente está desarrollando Aplicaciones y Mashups gracias a la API de Twittter, acá te damos una guía para que tú también puedas hacerlo.
Uno de los mayores éxitos de Twitter ha sido proporcionar una API funcional desde sus inicios, esto permite que otras personas extiendan las características que Twitter ofrece.
Desarrollen aplicaciones para enviar y compartir nuestros tweets sin estar obligados a utilizar el sitio oficial. Resulta interesante como han surgido diferentes proyectos que nos permiten apreciar y analizar los datos del servicio en diferentes formas. Todo gracias a que Twitter pensó en grande y esta compartiendo sus datos vía la API.
Detalles generales de la API
Para trabajar con la API de Twitter, contamos con la documentación oficial, acá están descritos todos los métodos que podemos utilizar. La API de Twitter está desarrollada en base al estilo arquitectural REST (Representational State Transfer).
Que a diferencia del XML-RPC es un diseño carente de estados y todos los métodos están disponibles en una única URL. Con excepción de algunos métodos públicos, todos los demás requieren de las credenciales de un usuario registrado, donde la autenticación se hace por medio de HTTP. En un futuro cercano Twitter espera ofrecer soporte al esquema OAuth.
La llamada a los métodos se hace por medio de peticiones HTTP GET o POST, según sea el caso. Para los métodos que devolverán datos podemos pedirlos en formato XML, JSON, RSS o ATOM. Cuando realizamos llamadas a los métodos debemos revisar el HTTP Status Code que nos devuelva el servidor de Twitter, si recibimos un código diferente de 200 sabremos que algo ha salido mal y el significado del código dependerá del método que estemos llamado.
Un punto muy importante que debemos tener en claro al trabajar con la API de Twitter, es que tenemos un límite de 70 peticiones por cada hora, por cada usuario (no por aplicación/IP). Los métodos públicos y los que requieren una petición POST no cuentan en este límite.
Esta restricción puede llegar a ser una de las mayores complicaciones cuando desarrollas con la API, hay que procurar optimizar las llamadas para no quedarnos fuera rápidamente. Si realmente necesitas hacer más peticiones, considera usar Jabber.
Enviando peticiones a la API
Para enviar las peticiones a la API de Twitter usaremos la extensión cURL. Para procesar los datos, usaremos XML, aprovechando que en PHP5 contamos con SimpleXML por defecto.
Primero veamos como hacer una petición GET usando cURL:
function getrequest($url,$user,$password) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, 0); // no imprimir nada curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERPWD, "$user:$password"); // autenticación curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // para no esperar indefinidamente curl_setopt($ch, CURLOPT_GET, 1); $result = curl_exec($ch); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if( $http_status != "200" ) { return null; } return $result; }
cRUL se encargará de hacer la petición vía HTTP, nosotros sólo debemos preocuparnos del resultado de esta, que es el valor de $http_status
, si es diferente de 200 sabemos que algo ha salido mal. Dependiendo de como diseñemos nuestra aplicación, sería recomendable guardar el valor de $http_status
para mostrar un mensaje de error más acorde a las circunstancias. Si queremos saber los últimos 20 estados en el friend_timeline de nuestro usuario, definimos una función para ello:
function getfriendtime() { $result = getrequest( 'http://twitter.com/statuses/friends_timeline.xml', $user, $password ); if ( !$result ) return false; $replies = simplexml_load_string( $result ); return $replies; }
Como en la petición indicamos que la respuesta fuera un XML, con ayuda de la funcion simplexml_load_string() obtenemos un objeto (en este caso $replies
) que represente este XML. Este objeto será un array de hasta viente elementos, donde cada uno contendrá esta información:
object(SimpleXMLElement)#6 (8) { ["created_at"]=> string(30) "Tue Apr 08 21:18:14 +0000 2008" ["id"]=> string(9) "785335201" ["text"]=> string(33) "@prigazzi ah ok, 95% tablefull :D" ["source"]=> string(3) "web" ["truncated"]=> string(5) "false" ["in_reply_to"]=> string(136) "@j_aroche por ahora, estructura general, header, footer, etc, totalmente tableless. El resto, sigue con las tablas que trae de fábrica." ["in_reply_to_user_id"]=> string(8) "10312222" ["user"]=> object(SimpleXMLElement)#26 (8) { ["id"]=> string(6) "849211" ["name"]=> string(13) "Javier Aroche" ["screen_name"]=> string(8) "j_aroche" ["location"]=> string(9) "Guatemala" ["description"]=> string(29) "Software Developer since 2002" ["profile_image_url"]=> string(85) "http://s3.amazonaws.com/twitter_production/profile_images/52346493/ie7logo_normal.jpg" ["url"]=> string(24) "http://javieraroche.com/" ["protected"]=> string(5) "false" } }
Como vemos cada tweet incluye toda la información necesaria que podamos necesitar, hasta información del usuario evitándonos tener que hacer peticiones adicionales.
La mayoría de peticiones a la API de Twitter se manejan de forma muy similar, lo único que cambiará es la estructura del XML (como al pedir la lista de followers) o incluso solo tienes que saber cuál fue el valor de $http_status
sin tener que interpretar el XML resultante (como al crear un favorito o agregar un nuevo amigo).
Solo hay dos peticiones, un nuevo estado y enviar un mensaje directo, que se manejarán un tanto diferente ya que requieren hacer un POST. Por ejemplo para actualizar el estado de nuestro usuario sería:
function postupdate($username,$password,$message){ $args= 'status='.urlencode($message); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://twitter.com/statuses/update.xml'); curl_setopt($ch, CURLOPT_VERBOSE, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_VERBOSE, 0); // no imprimir nada curl_setopt($ch, CURLOPT_USERPWD, "$username:$password"); curl_setopt($ch, CURLOPT_POSTFIELDS, $args); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_POST, 1); $result = curl_exec($ch); $http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if( $http_status != "200" ) { return false; } return true; }
Es importante que antes de enviar el mensaje lo codifiquemos con urlencode() para no tener problemas si este lleva una URL. Incluso puedes agregar un filtro en el mensaje que detecte urls y la acorte utilizando un servicio adicional.
Siempre es bueno aprender como funciona la API, pero también puedes optar por usar alguna librería/clase para la API de Twitter que te ahorre tiempo de desarrollo.
Trabajar con la API no es complicado, lo que hace falta es tener una idea sobre la cual puedas aprovechar la comunidad detrás de Twitter. Cada día salen interesantes herramientas, tal vez tu tengas la siguiente. 😉
Buen artículo!
Hay un eror en el codigo en lal inea “$http_status = curl_getinfo($curl_handle, CURLINFO_HTTP_CODE);” donde pone $curl_handle debe poner $ch
Un saludo
Excelente artículo. Precisamente hiba a comentar sobre la clase de Twitter para PHP pero veo que lo mencionaron. Que bien que dedicaron un artículo para el trabajo de la API con Twitter después de publicar el listado de las APIs más importantes.
@Danielsan, gracias por la observación! se me paso ese detalle
[…] Trabajando con la API de Twitter desde PHP (tags: twitter php) […]
De nada! 😉
Por cierto sería guay que publicarais algo sobre las expresiones regulares en PHP que para usar la API de twitter viene muy al pelo.
[…] Trabajando con la API de Twitter desde PHPwww.maestrosdelweb.com/editorial/trabajando-con-la-api-de-tw… por bcextreme hace pocos segundos […]
por ahi te voy a estar jodiendo que tengo en mente un par de experimentos con la api de twitter =D
tengo la duda que para que se puede usar eso de la API de twitter? alguien puede poner unos ejemplillos, para que me quede más clarico. Gracias
hola!
he visto una pagina de twitter donde dice que se puede hacer que el programa envíe un mensaje al celular cuando este php hace una actualización.
el php es de la central de bomberos.
sería muy util para la comunidad si se pudiera hacer filtros por campos.
alguien me puede enseñar como.
la comunidad de bomberos se lo agradcería muchisimo
saludos
http://twitter.com/bomberos
en esta pagina aprecen todas las emergencias pero como se hace para que llegue a tu celular
http://twitter.com/internacional14
en esta deseo aplicar el mismosistemapero filtrando solo las de lacia b14
saludos y gracias por su atencion
[…] Otro enlace relacionado: http://www.maestrosdelweb.com/ […]
[…] y la inmediatez de comunicación, además, Twitter es una plataforma abierta: han desarrollado un API que permite a cualquiera poder desarrollar aplicaciones para interactuar con Twitter. La gente lo […]
Yo desarrolle con html,javascript y css una api de twitter que permite enviar twit por url y desde mi blog en blogger ya que blogger lamentablemente no corre php asi que me ingenie un poco.
http://fresprog.blogspot.com/2008/12/como-crear-un-twitteador-para-tu-blog.html
[…] y la inmediatez de comunicación, además, Twitter es una plataforma abierta: han desarrollado un API que permite a cualquiera poder desarrollar aplicaciones para interactuar con Twitter. La gente lo […]
[…] que, al contrario de los emails o mensajes instantáneos, es extremadamente público. Además, las APIs permiten a terceras personas utilizar la información y extender el alcance del […]
Hola,
Me podrían ayudar, ya pude obtener el “object(SimpleXMLElement)#” mi duda es como recorrerlo o como puedo obtener la posición [“text”] de dicho elemento. En mi caso obtengo más de un post (object(SimpleXMLElement)#).
Saludos
Excelente!! justo lo que necesitaba!! soy consultor y muchas veces en las empresas donde voy siempre tienen bloqueado twitter, hare un proxy con esto y lo colgaré en uno de mis servidores el cual no esta bloqueado
saludos
Saludos, yo estoy intentado desarrollar un cliente de twitter en javascript, html y css, me pudieras echar una mano? Estoy algo perdido con la parte de la autenticacion, la lectura del xml ya le voy entendiendo pero me resulta algo confuso. mi mn es [email protected]
Hola que tal, quiero agregar en mi sitio para que se puedan ver los comentarios hechos a mi cuenta de twitter estoy haciendo mi web en dreamweaver pero no tengo mucha práctica con la programación, hay alguna forma de copiar el html de algún lado y ya me los muestre o hay que hacer todo a patita.
[…] es fácil adivinar sobre su función, es una aplicación creada con el fin de comunicarse con el API de Twitter. Además, tiene más opciones útiles al momento de Twittear. También destaca el soporte de idioma […]
ola