Migración a la API v1.1 de Twitter

Desde el 11 de Junio la API v1 de Twitter ha dejado de funcionar, obligando a los desarrolladores web a adaptarse a su nueva API v1.1.  En la Escuela Politécnica usábamos la antigua API para 2 cosas:

  1. Para publicar nuestro el último tweet de @EPSAlicante en el frontalÚltimo tweet frontal EPSAlicante
  2. Para publicar directamente en @EPSAlicante solicitudes de tweets realizadas a través de nuestros eServices por los profesores de la EPS.

Para el caso 1 nos encontramos con un cambio drástico. Hasta ese momento, con la API v1 con la simple llamada a http://search.twitter.com/search.atom?q=from:EPSAlicante&rpp=1 obteníamos el último tweet en formato RSS en el cual nos encontrábamos perfectamente enlazados todos los @ y enlaces que tuviera. A partir del 11 de Junio nos encontramos con esto:

<errors>
<error code=”68″>
The Twitter REST API v1 is no longer active. Please migrate to API v1.1. https://dev.twitter.com/docs/api/1.1/overview.
</error>
</errors>

Revisando dicha página nos encontramos con 2 grandes cambios:

  • JSON support only : según Twitter, XML, Atom y RSS no se ha seguido utilizando porque son poco usados a día de hoy. Eso es muy discutible. De todos modos la información que ahora nos devuelve twitter es muchísima. Podréis verla más abajo.
  • Authentication required on all endpoints : para evitar abusos de uso de la API.

Pues bien, esto nos obligó a realizar una página intermedia que hiciera la petición a la API con los datos de la autenticación. Para ello seguimos las instrucciones que se indican aquí: http://www.webdevdoor.com/php/authenticating-twitter-feed-timeline-oauth/

En la misma página se enlaza a otra donde explica como realizar un Twitter Feed con jQuery:http://www.webdevdoor.com/javascript-ajax/custom-twitter-feed-integration-jquery/

En dichas instrucciones se utiliza la librería twitteroauth que podéis encontrar aquí https://github.com/abraham/twitteroauth . Este librería ya la usábamos para el punto 2 pero ahora con su versión para la nueva API también la hemos utilizado para el punto 1.

Para la llamada podéis usar los siguientes parámetros que se indican aquí https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline . En nuestro caso, el código para realizar la llamada es:

<?php
session_start();
include("/twitteroauth/twitteroauth.php"); //ruta a librería twitteroauth 

$twitteruser = "epsalicante";
$notweets = 1;  //quiero el último
//los siguientes 4 datos los tenéis que obtener de vuestra cuenta de twitter como se indica
//en la página http://www.webdevdoor.com/php/authenticating-twitter-feed-timeline-oauth/
$consumerkey = "XXXXXXXXXXXXXXXX";
$consumersecret = "YYYYYYYYYYYYYYYYY";
$accesstoken = "AAAAAAAAAAAAAAAA";
$accesstokensecret = "SSSSSSSSSSSSSSSSS";

function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) {
 $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
 return $connection;
}
$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);

$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$twitteruser."&count=".$notweets);

echo json_encode($tweets);
?>

 

El JSON que nos devuelve tiene el siguiente formato y contiene una gran cantidad de información. Os mostramos parte de la información devuelta para un retweet que le hicimos a @UA_Universidad  https://twitter.com/UA_Universidad/status/344772122171805696, para ver el JSON completo pincha aquí json_twitter:
 [
   {
      "created_at":"Mon Jun 17 06:15:05 +0000 2013",
      "id":2147483647,
      "id_str":"346511297162121217",
      "text":"RT @UA_Universidad: #Becas excelencia acad\u00e9mica destinadas a quienes hayan
 concluido estudios curso 2010-11 http:\/\/t.co\/BJBruI47xi v\u00eda @gva\u2026",
      "source":"TweetDeck",
      "truncated":false,
      ........
      "user":{
         "id":25486861,
         "id_str":"25486861",
         "name":"EPS Alicante",
         "screen_name":"EPSAlicante",
         "location":"Universidad de Alicante",
         "description":"Twitter de la Escuela Polit\u00e9cnica Superior de la Universidad de Alicante",
        ......
         "followers_count":2553,
         "friends_count":83,
        ......
      },
      "geo":null,
      "coordinates":null,
      "place":null,
      "contributors":null,
      "retweeted_status":{
         "created_at":"Mon Jun 17 06:10:54 +0000 2013",
         "id":2147483647,
         "id_str":"346510242902843395",
         "text":"#Becas excelencia acad\u00e9mica destinadas a quienes hayan concluido estudios
 curso 2010-11 http:\/\/t.co\/BJBruI47xi v\u00eda @gvajove",
         "source":"HootSuite",
         "truncated":false,
        .......
         "user":{
            "id":266544890,
            "id_str":"266544890",
            "name":"Universidad Alicante",
            "screen_name":"UA_Universidad",
            "location":"Alicante, Espa\u00f1a",
            ....
         },

         ...
      },
      "retweet_count":2,
      "favorite_count":0,
    ...
   }
]
Para el frontal sólo necesitábamos los datos que os hemos marcado en rojo o en azul, dependiendo de si el tweet es un RT o no. Para recoger dicha información hemos hecho lo siguiente:
<?php
//hay que comprobar si se trata de un tweet o RT ya que si es RT debemos coger la info en otros campos
//porque si lo cogemos del primer "text" éste NO viene completo
 if(!isset($info[0]->{"retweeted_status"})){
    $fechatweet = $info[0]->{"created_at"}; 
    $textotweet = htmlentities(utf8_decode($info[0]->{"text"}),ENT_QUOTES);
 }
 else{ 
       $datosRT = get_object_vars($info[0]->{"retweeted_status"});
       $fechatweet = $datosRT["created_at"];
       $textotweet = "RT @".$datosRT["user"]->{"screen_name"}.": ".htmlentities(utf8_decode($datosRT["text"]),ENT_QUOTES);
 }

 list($diasemana,$mes,$diames,$hora,$gmt,$anyo) = preg_split("/ /",$fechatweet);
 $nuevaHora = strtotime ( '+2 hour' , strtotime ( $hora ) ) ;
 $horaFinal = date("H:i:s",$nuevaHora);
 $tweetFinal = "$textotweet &nbsp; - ".$diames."/".$mes."/".$anyo." ".$horaFinal;
?>

Para hacer linkables tanto los usuarios de twitter como los links que aparecen en el tweet hemos utilizado la función addlinks que tenéis aquí http://www.webdevdoor.com/javascript-ajax/custom-twitter-feed-integration-jquery/

 

Para el caso 2 , seguimos con la librería twitteroauth . Si ya la utilizabais con anterioridad os bastará con actualizarla ya que la manera de trabajar es la misma, es decir:
  1. Creamos la función para hacer la conexión.  ¡Importante! En este caso tendréis que indicar en la app de twitter que son claves para una app de lectura y escritura (Read-Write)

    function getConnectionWithAccessToken() { 
         $connection = new TwitterOAuth(_CONSUMER_KEY, _CONSUMER_SECRET,_OAUTH_TOKEN, _OAUTH_TOKEN_SECRET); 
         return $connection; 
    }
  2. Hacemos la llamada POST para crear un nuevo tweet
     $twitter = $connection->post('statuses/update', array('status' =>$tweet_a_publicar)); 

 

Esperamos haberos servido de ayuda.

Be Sociable, Share!

Deja un comentario