API de Twitter, PHP y cURL

  • Por
  • PHP
Hacemos un primer script PHP que se conecta con el API de Twitter y accede a la información por medio de la librería cURL.
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

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

julian

09/7/2012
CURL
Hola que buen aporte. Te agradeceria enormemente si me ayudas con el siguiente asunto ya que veo que manejas muy bien CURL

Yo utilizo el siguiente metodo y me fuciona muy bien. Es para enviar una peticion via GET con CURL

$command_val= urlencode('transactod..');
$username_val= urlencode('fred123'); ??? campo de texto de otro formulario que varia
$amount_val = urlencode('10');

$str= "?Command=".$command_val."&Username=".$username_val."&Amount=".$amount_val;

print $str;

$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'https://www.voipinfocenter.com/API/Request.ashx'.$str);
curl_exec($ch);
curl_close($ch);

Pero lo que yo necesito es traer el valor de la variable $username es decir en este caso "fres123" o cualquier otro de un formulario en otra ubicacion por ejemplo formulario.php a esta ubicacion. es de un campo tipo texto que cambia dependiendo del valor que se elija.

Las variables $command y $amount son constantes con los mismo valores pero el username varia. Todo esto lo envio mediante esta peticion via GET


Como lo podria hacer?

Agradesco mucho tu respuesta. Muchas Gracias