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:
- Para publicar nuestro el último tweet de @EPSAlicante en el frontal
- 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 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:
<?phpsession_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);?>
[{ "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, ... } ]
<?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 completoif(!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 - ".$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/
- 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; }
- Hacemos la llamada POST para crear un nuevo tweet
$twitter = $connection->post('statuses/update', array('status' =>$tweet_a_publicar));
Esperamos haberos servido de ayuda.