Recogiendo datos de la API de búsqueda en Twitter mediante PHP

  • Por
  • 07 de agosto de 2012
  • Valoración:
  • 1 Comentarios
  • PHP
consultar el API de búsqueda de Twitter y procesar la respuesta recibida en formato XML mediante PHP.
En este artículo vamos a empezar a trabajar con la API de búsqueda en Twitter, una de las diferentes API que ofrece la red de microblogging. Usaremos la de búsqueda, ya que es una de las más útiles y sencillas de utilizar.

El nombre de esta API es Twitter Search API y funciona básicamente enviando consultas a URL en las que indicamos los filtros de la búsqueda mediante parámetros en GET.

Mediante las direcciones de búsqueda obtendremos un archivo JSON o XML. En este artículo usaremos el XML que se obtiene al acceder a URL como la de este enlace, ya que nos será muy fácil de tratar mediante PHP.


Entendiendo cómo funciona la API de búsqueda de Twitter

Solicitar una URL de la API nos devolverá el XML que podremos usar en PHP. Los parámetros que pasaremos por GET ofrecerán instrucciones a esta API con las que indicar qué buscas, cuántos resultados quieres, etc.

El archivo XML está estructurado de manera que cada tweet encontrado está en un tag ENTRY y a su vez, dentro encontramos varias etiquetas o tags con diversas otras informaciones como AUTOR para el autor, TWITTER:GEO para la geolocalización, CONTENT para el contenido del tweet en cuestión, etc.
 

Generando el archivo que necesitemos

Para generar el archivo deseado, lo que haremos es escribir la URL http://search.twitter.com/search.atom y luego añadirle los parámetros necesarios con tal de filtrar nuestra búsqueda.

Veamos las variables importantes que usa por GET esta API, con las cuales podremos trabajar para generar nuestro XML personalizado.

q: Sirve para definir que es lo que buscamos.

  • Buscar una palabra cualquiera: q=Mipalabra
  • Buscar una frase: q=Mi%20Palabra%20a%20Buscar (%20 equivale a un espacio)
  • Buscar una mención: q=@deswebcom
  • Buscar un hashtag: q=%23Desarrolloweb (%23 equivale a un #)
geocode: Filtrará la búsqueda según la cercanía a unas coordenadas, es decir, le vamos a dar una longitud, una latitud y un radio para que filtre los tweets hechos en ese radio.
  • Estructura: geocode=latitud,longitud,radio
  • Filtrar en kilómetros: geocode=45.3,-29.23,2km
  • Filtrar en millas: geocode=45.3,-29.23,2mi
lang: Filtrar por lenguaje, utiliza la norma ISO_639-1
  • Búsqueda en español: lang=es
  • Búsqueda en catalán: lang=ca
  • Búsqueda en inglés: lang=en
rpp: El número de tweets que quieres mostrar por página con un máximo de 100. Un valor más elevado no te dará problemas, pero seguirás recibiendo 100.
  • Ejemplo: rpp=50
page: Esta API nos pasa un número de resultados que podemos controlar, como hemos visto, con rpp resultados. Al ser así, podemos usar page para ver más si fuera necesario.
  • Ejemplo de uso: page=3
    Nota: Por ejemplo, si quisiéramos ir buscando todas las páginas, podríamos generar un XML con page=1 y que fuera creciendo mediante un contador (por ejemplo, si trabajamos en PHP) hasta que no nos retornara más tweets (CONTENT vacío).
result_type: Tweeter nos permite tres tipos de resultados. Por defecto el resultado será "mixed".
  • Mixto: result_type=mixed o no poner nada. (Incluye los resultados populares y los recientes en tiempo real).
  • Reciente: result_type=recent (Incluye los resultados recientes en tiempo real).
  • Popular: result_type=popular (Incluye los resultados populares).
until: De esta manera veremos los tweets hasta la fecha elegida.
  • Estructura: until=AAAA-MM-DD.
  • Ejemplo: until=2012-02-30.

Recogiendo mediante PHP la información necesaria

Para recoger la información, usaremos la función simpleXML_load_file(), de la cual ya hablamos en el artículo del API de Youtube. En resumen, a esta función le pasas archivo con formato XML y te devuelve un objeto cuyas propiedades son los datos que hay en el archivo.
 

Ejemplo práctico

En este ejemplo vamos a ver cómo generar un archivo XML que nos va a buscar tweets hasta la fecha del 27/07/2012 que contengan la palabra "Desarrollo", que estén en español y con un máximo de 1 tweet.

Seguidamente los recogeremos en PHP y mostraremos su autor y el tweet en nuestro documento.

Nota: Cabe aclarar que Twitter tiene problemas de sobrecarga con bastante frecuencia. Si no os va twitter tampoco os va a funcionar su API y por tanto tampoco este ejemplo.

La URL que usaremos es: search.twitter.com/search.atom?until=2012-07-27&q=Desarrollo&lang=es&rpp=1

En mi caso me ha generado este código XML, en vuestro caso os debería dar un código igual al mío, pero como es lógico con unos tweets diferentes (os muestro el XML a partir del ENTRY).

<entry>
   <id>tag:search.twitter.com,2005:228517867493142528</id>
   <published>2012-07-26T15:51:19Z</published>
   <link type="text/html" href="http://twitter.com/ToniNrStinson/statuses/228517867493142528" rel="alternate"/>
   <title>RT @ToniJC_N: Cuba es el único país del mundo que cumple los requisitos de la WWF de desarrollo sostenible. #Paraisocomunista</title>
   <content type="html">RT @ToniJC_N: Cuba es el único país del mundo que cumple los requisitos de la WWF de desarrollo sostenible. #Paraisocomunista</content>
   <updated>2012-07-26T15:51:19Z</updated>
   <link type="image/png" href="http://a0.twimg.com/profile_images/2159161467/twitter_normal.jpg" rel="image"/>
   <twitter:geo></twitter:geo>
   <twitter:metadata>
      <twitter:result_type>recent</twitter:result_type>
   </twitter:metadata>
   <twitter:source>Twitter for Android</twitter:source>
   <twitter:lang>es</twitter:lang>
   <author>
      <name>ToniNrStinson (Toni Nuñez Rodriguez)</name>
      <uri>http://twitter.com/ToniNrStinson</uri>
   </author>
</entry>

Ahora voy a tratar con PHP este resultado

//funcion que extrae los comentarios de Twitter sobre un hastag
$datos = simpleXML_load_file("http://search.twitter.com/search.atom?until=2012-07-27&q=Desarrollo&lang=es&rpp=1");

//Imprimo todos los tweets y su autor (en mi ejemplo solo 1 tweet)
foreach($datos->entry as $tweet){
echo "<div><h3>".$tweet->author->name."</h3><span>".$tweet->content."</span><br><br></div>";
}

Autor

Enrique Fernandez Guerra

Desarrollador web Frontend, Estudiante de Telecos trabajando en Beezy.net. Microsoft Student Partner y presentador de los programas #jsIO y #startupsIO

Comentarios

esmudo

13/8/2012
Gracias !!
precisamente es lo que estaba buscando para un nuevo desarrollo que basará sus visitas en los comentarios sobre un hastag.

Muchas gracias por el artículo está genial !!
Lo pruebo y comento...

Compartir