Cómo usar la API de Twitter en PHP

Cómo usar la API de Twitter en PHP
portada1

Buenas a todos, en este nuevo tutorial vamos a aprender a usar la API de Twitter en PHP, el objetivo primordial del tutorial será obtener los 100 últimos tweets de un usuario dado.

En primer lugar cabe mencionar que vamos a usar la versión 1.1 de la API de twitter debido a que la 1.0 esta deprecated, la versión 1.1 requiere que para poder usar la aplicación tengamos que usar autentificación OAUTH.

El tutorial consta de 6 pasos más 2 anexos, los cuales puedes ver a continuación:

  1. Crear una cuenta de desarrollador y una nueva Aplicación.
  2. Crear los Tokens de acceso.
  3. Crear acceso desde php a la API de Twitter y obtener un JSON de los tweets de un usuario.
  4. Filtrar la información útil y crear un array multidimensional del mismo.
  5. Crear una Tabla a partir de un array multidimensional.
  6. Mostrar el resultado.
  7. Anexo I: Información a tener en cuenta.
  8. Anexo II: Código completo del tutorial.

1. Crear una cuenta de desarrollador y una nueva Aplicación

Para crear una cuenta de desarrollador tenemos que dirigirnos a la siguiente dirección:

https://dev.twitter.com/

Y loguearnos con nuestra cuenta de usuario. Seguidamente pulsamos el siguiente enlace:

https://apps.twitter.com/

Y creamos una nueva aplicación:

Captura0

Rellenamos los campos con los datos de nuestra APP:

Captura1

2. Crear el Token de acceso

Los Tokens de acceso son las claves que vamos a necesitar para comunicarnos con la API de Twitter, vamos a necesitar cuatro Tokens o claves:

  • The api key
  • The api secret
  • The access token
  • The access token secret

Para obtener estas claves o Tokens tenemos que dirigirnos a la pestaña API Keys.

Captura2

Nos guardamos la API key y la API Secret que nos aparece en pantalla.

Captura3

Seguidamente le damos a generar El Token Access:

Captura4

Y vemos que se nos han generado dos Tokens "Access token" y el "Access token secret" los cuales tenemos que guardar:

Captura5

3. Crear acceso desde php a la API de Twitter y Obtener un Json con los últimos tweets de un usuario

Una vez que tenemos todas las claves necesarias para hacer funcionar la API de Twitter vamos a ir a lo bueno, en primer lugar vamos a ver como poder autentificarnos mediante PHP en la API de Twitter.

Existen distintas librerías hechas en PHP para gestionar la API de Twitter, yo he decidido usar una que me parece la mas sencilla, ya que no solo requiere la importación de un solo archivo PHP.  La librería en cuestión se llama TwitterAPIExchange y la podéis descargar desde el mismo GitHub del autor.

Para la realización de este tutorial vamos a crear en primer lugar un archivo PHP llamado showTweets.php, el cual contendrá una clase llamada Twitter con las siguientes funciones:

  • getTweets() : Devuelve el JSON obtenido en la consulta.
  • getArrayTweets($jsonraw): Devuelve un array multidimensional con los datos que vamos a mostrar en pantalla.
  • displayTable($rawdata): mostrará una tabla en pantalla con los datos del array multidimensional.

Por lo tanto lo único que tendremos que hacer será llamar a estas tres funciones para que nos muestre la información.

Así pues, la primera función getTweets() se creará con ayuda de la librería TwitterAPIExchange. En primer lugar vamos a introducir todas nuestra claves para identificarnos mediante OAuth en la API v1.1 de Twitter.

require_once('TwitterAPIExchange.php'); $settings = array( 'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN", 'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET", 'consumer_key' => "YOUR_CONSUMER_KEY", 'consumer_secret' => "YOUR_CONSUMER_SECRET" );

Seguidamente podemos escoger hacer las peticiones mediante método GET o POST, en mi caso he elegido el metodo GET. Para obtener un JSON con todos los tweets de un usuario dado tenemos que hacer una petición a la siguiente dirección:

https://api.twitter.com/1.1/statuses/user_timeline.json

En nuestro caso vamos  a mostrar los 100 últimos tweets de un usuario dado, por lo que tendremos que añadir el parámetro screen_name=[NOMBRE DE USUARIO SIN @] y count=100   para saber que parámetros podemos usar en esta petición miren la documentación de la API.

El código para hacer una petición y ver mis los últimos 100 tweets de mi cuenta @alex_esquiva es el siguiente:

$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'; $getfield = '?screen_name=alex_esquiva&count=100'; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); $json =  $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest();

Si hacemos un echo del resultado, copiamos el JSON y lo pasamos por http://jsonviewer.stack.hu/ vemos lo siguiente:

Captura6

4. Filtrar la información útil y crear un array multidimensional del mismo.

El siguiente paso que vamos a hacer es filtrar la información que nos interesa y almacenarla en un array multidimensional para más tarde mostrarlo en una tabla. Para esto vamos a crear una función llamada getArrayTweets($jsonraw) que aceptara una variable donde se almacenará el JSON para poder sacar información útil de el. Esta función va a devolver un array multidimensional con los datos que hemos filtrado.

En primer lugar vamos a codificar el JSON que hemos obtenido:

$json = json_decode($jsonraw);

Seguidamente vamos a almacenar el numero de items que tiene este JSON:

$num_items = count($json->statuses);

Con ayuda de un bucle for vamos a iterar los item y vamos a ir almacenando en un array multidimensional rawdata toda la información.

En nuestro caso vamos a mostrar la siguiente información:

  • Fecha
  • Imagen
  • Usuario
  • Tweet

Pero podemos obtener todo lo que queramos del JSON, para ello recomiendo que os miréis la serie de tutoriales de JSON que hice hace algún tiempo:

http://geekytheory.com/category/geeky-theory-2/tutoriales-2/programacion-web/json/

for($i=0; $i<$num_items; $i++){ $user = $json[$i]; $fecha = $user->created_at; $url_imagen = $user->user->profile_image_url; $screen_name = $user->user->screen_name; $tweet = $user->text; $imagen = "<a href='https://twitter.com/".$screen_name."' target=_blank><img src=".$url_imagen."></img></a>"; $name = "<a href='https://twitter.com/".$screen_name."' target=_blank>@".$screen_name."</a>"; $rawdata[$i][0]=$fecha; $rawdata[$i]["FECHA"]=$fecha; $rawdata[$i][1]=$imagen; $rawdata[$i]["imagen"]=$imagen; $rawdata[$i][2]=$name; $rawdata[$i]["screen_name"]=$name; $rawdata[$i][3]=$tweet; $rawdata[$i]["tweet"]=$tweet; }

5. Crear una Tabla a partir de un array multidimensional.

La última función que implementaremos será displayTable($rawdata), esta función mostrará en pantalla la información filtrada en el paso anterior.

//DIBUJAMOS LA TABLA echo '<table border=1>'; $columnas = count($rawdata[0])/2; //echo $columnas; $filas = count($rawdata); //echo "<br>".$filas."<br>"; //Añadimos los titulos for($i=1;$i<count($rawdata[0]);$i=$i+2){ next($rawdata[0]); echo "<th><b>".key($rawdata[0])."</b></th>"; next($rawdata[0]); } for($i=0;$i<$filas;$i++){ echo "<tr>"; for($j=0;$j<$columnas;$j++){ echo "<td>".$rawdata[$i][$j]."</td>"; } echo "</tr>"; } echo '</table>';

6. Mostrar el resultado

Una vez que ya tenemos todas las funciones implementadas vamos a juntarlas para mostrar una tabla de los últimos 100 tweets de un usuario concreto, así pues, primero creamos un objeto de la clase Twitter y llamamos a las funciones oportunas:

$twitterObject = new Twitter(); $jsonraw =  $twitterObject->getTweets("alex_esquiva"); $rawdata =  $twitterObject->getArrayTweets($jsonraw); $twitterObject->displayTable($rawdata);

Captura7

ANEXO I : Información a tener en cuenta

Hay que tener en cuenta los siguientes puntos:

ANEXO II: Código completo del tutorial

A continuación se muestra el código completo empleado en este tutorial, hay que tener en cuenta que es necesario descargar la librería TwitterAPIExchange y situarla en el mismo directorio de nuestro archivo.

<meta charset="utf-8"> <?php class Twitter{ function getTweets($user){ ini_set('display_errors', 1); require_once('TwitterAPIExchange.php'); $settings = array( 'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN", 'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET", 'consumer_key' => "YOUR_CONSUMER_KEY", 'consumer_secret' => "YOUR_CONSUMER_SECRET" ); $url = 'https://api.twitter.com/1.1/statuses/user_timeline.json'; $getfield = '?screen_name='.$user.'&count=100'; $requestMethod = 'GET'; $twitter = new TwitterAPIExchange($settings); $json =  $twitter->setGetfield($getfield) ->buildOauth($url, $requestMethod) ->performRequest(); return $json; } function getArrayTweets($jsonraw){ $rawdata = ""; $json = json_decode($jsonraw); $num_items = count($json); for($i=0; $i<$num_items; $i++){ $user = $json[$i]; $fecha = $user->created_at; $url_imagen = $user->user->profile_image_url; $screen_name = $user->user->screen_name; $tweet = $user->text; $imagen = "<a href='https://twitter.com/".$screen_name."' target=_blank><img src=".$url_imagen."></img></a>"; $name = "<a href='https://twitter.com/".$screen_name."' target=_blank>@".$screen_name."</a>"; $rawdata[$i][0]=$fecha; $rawdata[$i]["FECHA"]=$fecha; $rawdata[$i][1]=$imagen; $rawdata[$i]["imagen"]=$imagen; $rawdata[$i][2]=$name; $rawdata[$i]["screen_name"]=$name; $rawdata[$i][3]=$tweet; $rawdata[$i]["tweet"]=$tweet; } return $rawdata; } function displayTable($rawdata){ //DIBUJAMOS LA TABLA echo '<table border=1>'; $columnas = count($rawdata[0])/2; //echo $columnas; $filas = count($rawdata); //echo "<br>".$filas."<br>"; //Añadimos los titulos for($i=1;$i<count($rawdata[0]);$i=$i+2){ next($rawdata[0]); echo "<th><b>".key($rawdata[0])."</b></th>"; next($rawdata[0]); } for($i=0;$i<$filas;$i++){ echo "<tr>"; for($j=0;$j<$columnas;$j++){ echo "<td>".$rawdata[$i][$j]."</td>"; } echo "</tr>"; } echo '</table>'; } } $twitterObject = new Twitter(); $jsonraw =  $twitterObject->getTweets("alex_esquiva"); $rawdata =  $twitterObject->getArrayTweets($jsonraw); $twitterObject->displayTable($rawdata); ?>

PODÉIS DESCARGAR EL CÓDIGO EN EL SIGUIENTE REPOSITORIO DE GITHUB.

github-logo

Y esto es todo, espero que os haya gustado el tutorial y no dudéis en dejar un comentario si os surgiera alguna duda.

!Saludos!

@alex_esquiva