Problemas al recuperar tweets desde una página web

Peticiones a la API de Twitter que dejan de funcionar

Últimamente algunas funciones relacionadas con Twitter y su integración en páginas web o acceso a canales RSS a través de su API están fallando. En vez de aparecer, por ejemplo, una lista con las últimas actualizaciones de una cuenta, aparece un mensaje que dice “No public Twitter messages“, o simplemente deja de funcionar y no muestra ningún tweet.

Esto también afecta a algunas extensiones (por ejemplo, plugins de WordPress) que se encargan de incrustar mensajes de Twitter en una web. Por ejemplo, el plugin “Twitter for WordPress” hace tiempo que no se actualiza, y por tanto dejará de funcionar correctamente.

El problema es que en marzo de 2012 Twitter anunció que haría algunos cambios en su API, pero en algunos casos han seguido funcionando sin problema hasta octubre, fecha en la que han desactivado definitivamente las solicitudes obsoletas.

Para identificar estas URLs que hay que actualizar, tenemos que buscar direcciones de este tipo:

http://twitter.com/statuses/user_timeline/nombre-usuario.json?callback…

Y sustituirlas por:

https://api.twitter.com/1/statuses/user_timeline/nombre-usuario.json?callback…

Es decir, en la primera dirección, falta el subdominio “api” delante de “twitter.com”, así como el número de la versión que se utiliza.

Por ejemplo, si utilizábamos algo así para recuperar el último mensaje publicado en una cuenta de Twitter…

<script>
// Esto ya no funciona
// Devuelve el tweet más recientes publicado por el usuario indicado
$.getJSON("http://twitter.com/statuses/user_timeline/nombre-usuario.json?callback=?", function(data) {
	$("#twitter").html(data[0].text);
});
</script>

…Ahora tendremos que modificar la URL así:

<script>
// Esto sí funciona
// Devuelve el tweet más recientes publicado por el usuario indicado
$.getJSON("https://api.twitter.com/1/statuses/user_timeline.json?screen_name=nombre-usuario&callback=?", function(data) { 
	$("#twitter").html(data[0].text);
});
</script>

Lo mismo pasa con cualquier solicitud al RSS de una cuenta:

Esto ya no funciona: “http://twitter.com/statuses/user_timeline/daninabil.rss
En cambio esto sí funciona: “https://api.twitter.com/1/statuses/user_timeline/daninabil.rss

De todas formas, en la versión 1.1 dejarán de funcionar estas solicitudes al RSS del timeline público con “api.twitter.com/1/statuses/public_timeline”. O sea que aunque hagamos este cambio, con el tiempo dejará de funcionar (concretamente, en marzo de 2013 dejaran de aceptarse las peticiones a la API versión 1).

Por ejemplo, en el caso del plugin “Twitter for WordPress”, para que siga funcionando tendremos que abrir el archivo “twitter.php” y sustituir la linea 54:

<?php 
// Esta URL ya no se utiliza
$messages = fetch_rss('http://twitter.com/statuses/user_timeline/'.$username.'.rss'); 
?>

Por esta otra dirección:

<?php 
// URL actualizada según las recomendaciones de la API del servicio
$messages = fetch_rss('https://api.twitter.com/1/statuses/user_timeline/'.$username.'.rss'); 
?>

En este caso se trata de un plugin que no se actualiza hace años, o sea que no conviene esperar a que el autor lo haga por nosotros.

Resumiendo

Si estás utilizando algún servicio relacionado con Twitter (incrustar mensajes en una página web, acceso a timelines de usuarios, a canales RSS de una cuenta, etc.) y en octubre de 2012 ha dejado de funcionar o aparecen mensajes como “No public Twitter messages”, lo más probable es que la URL que apunta a la API del servicio haya quedado obsoleta. Hay que sustituirla por la dirección actualizada, que debe incluir el subdominio “api” y el número de versión de ésta.

Más información

Actualización junio 2013

El 11 de junio de 2013 Twitter ha anunciado que retira definitivamente la versión 1 de su API y pasa a utilizar únicamente la 1.1. Esto significa que a partir de ahora las peticiones a “api.twitter.com/1/…” no recibirán ninguna respuesta y que el único formato de salida de esta nueva API 1.1 pasa a ser JSON (por tanto, dejan de poder utilizarse XML, RSS y ATOM).

Ya no es posible, por ejemplo, seguir a un usuario por RSS con direcciones de este tipo: https://api.twitter.com/1/statuses/user_timeline/usuario.rss, ni tampoco algo tan útil como gestionar nuestros tweets favoritos desde un lector de feeds RSS.

Ahora ya no se permiten las peticiones no autorizadas, lo cual probablemente deje muchos plugins de WordPress inutilizados. Todas las peticiones deben ser autenticadas. Para ello primero tenemos que crear una cuenta de desarrollador de Twitter y después crear una aplicación (aunque sea para una apliación simple como recuperar mensajes desde una web), lo cual nos devolverá las claves necesarias para trabajar (clave de consumidor, secreta, token de acceso…)

Twitter-Timeline

Como comenta Juan en los comentarios, una forma fácil de mostrar el timeline de un usuario es Twitter-Timeline, de David Miguel Lozano.

Utiliza la nueva API 1.1 y mediante PHP y OAuth genera código HTML5 personalizable. Es totalmente configurable y está en español.

Estas son las características de Twitter-Timeline:

  • Muestra el timeline de Twitter del usuario especificado. Incluyendo el nombre, nombre de usuario, fecha, tweet, número de RTs y número de favoritos
  • Permite configurar el número de tweets a mostrar
  • Permite mostrar RTs
  • Permite ocultar los tweets de respuesta (los que empiezan con @usuario)
  • Implementa cache para evitar superar el nº máx de peticiones permitidas por la API (150 peticiones/hora)
  • Permite configurar el formato de la fecha. Incluyendo el estilo de Twitter (ej: hace 1 h.)
  • Permite personalizar totalmente el HTML que genera
  • Convierte en enlaces las URLs, twitter IDs y hashtags
  • Estilos CSS predefinidos y fácilmente personalizables
  • Permite mostrar varios timelines por separado

Ver en Github »

Más información

Comentarios

  1. luciano

    hola tengo este código..

    pero al modificarlo por el que decis no me funciona

  2. Arlenny

    Muchisimas gracias, me has salvado. : )

  3. Alex

    Genial ! me reconoció usando este tips que publicas: https://api.twitter.com/1/statuses/user_timeline/daninabil.rss

  4. Manolo

    Muchas gracias por la informacion. Me ha resultado de gran ayuda y ya funciona gracias a vuestra explicación

  5. Miguel Angel

    Gracias por esta información. Me has ahorrado varios cabezazos contra la pared….
    … y volver a pintar.

  6. Hola amigo, muy buena informacion, me solucionas te el problema. Es mas, creo que por ningún lado la he visto. Gracias

  7. Rodrigo

    Saludos! No he logrado que me funcione a mi, podrían ayudarme con esto. O será que no funciona en todas las paginas.

  8. Al fin!!!, muchas gracias por la info, ya lo tengo funcionando de nuevo.
    De todas maneras, hoy es 10 de Mayo del 2013 y esto sigue funcionando (me refiero a la version 1 (api). Espero que siga durante mucho tiempo más.

    Repito, gracias amigo

  9. Juan

    Tras horas buscando, os dejo la forma más fácil que he encontrado para mostrar el timeline de un usuario:

    https://github.com/davidmigloz/Twitter-Timeline

    Es muy configurable en cuanto a la información que quieres mostrar y puedes personalizar fácilmente el código html que genera. Y además, está en español.

    Un saludo

  10. Daniel

    Muchas gracias por el apunte, Juan. Lo he añadido también en la entrada, por si a alguien más le soluciona el problema.

Y tú qué opinas?

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)