13Ago 2010 72 Comments */?>

Actualizar Twitter a traves de PHP y OAuth

Categorías: Tutoriales - Tags: ,

Hasta hace poco Twitter permitía la actualización de status a través de un método sencillo mandando usuario , contraseña y mensaje de una sola vez a través de una sencilla función. Hoy en día esto ya no es así y el único modo de interactuar con la API de Twitter es usando OAuth

El método antiguo:

function postToTwitter($mensaje){
 
    $host = "http://twitter.com/statuses/update.xml?status=".urlencode($mensaje);
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $host);
    curl_setopt($ch, CURLOPT_VERBOSE, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_USERPWD, "Usuario:password");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_POST, 1);
 
    $result = curl_exec($ch);
    // Look at the returned header
    $resultArray = curl_getinfo($ch);
 
    curl_close($ch);
 
    if($resultArray['http_code'] == "200"){
         $twitter_status='Tu mensaje se envio!';
    } else {
         $twitter_status="Error ";
    }
	return $twitter_status;
}

A partir de ahora tenemos que usar OAuth para que nuestros usuarios se autentifiquen de forma segura en Twitter o mejor dicho en nuestra aplicación de Twitter.
Pero que pasa cuando no necesitamos que usuarios interactuen con Twitter sino más bien lo único que queremos es actualizar nuestro propio Twitter por ejemplo con los nuevos artículos de nuestro blog. En este caso OAuth resultaría muy tedioso ya que no necesitamos autentificarnos cada vez que queremos publicar un nuevo twitter, si no más bien obtener un ACCESS_TOKEN que no expire y nos sirva para siempre.

Usar Twitter OAuth + PHP para actualizar tu status

Lo primero que necesitamos es crear una aplicación en Twitter Apps . Al crear la aplicación debemos asegurarnos de elegir Client y de dar permisos Read & Write (lectura y escritura). Los demás campos no son importantes ya que no usaremos esta aplicación con usuarios. Una vez creada la aplicación obtendremos el Consumer Key y Consumer Secret .El access token (oauth_token) lo podemos ver si hacemos click en My Access Token

Lo segundo es bajar la librería twitteroauth de Abraham y subir a tu servidor los archivos OAuth.php y twitteroauth.php


Por último en tu archivo PHP debes incluir las siguientes funciones:

require('twitteroauth.php'); //incluir la librería
define('_CONSUMER_KEY','tuConsumerKey'); //La obtenes en el paso 1
define('_CONSUMER_SECRET','tuConsumerSecret'); //La obtenes en el paso 1
define('_OAUTH_TOKEN','tuOAuthToken'); //La obtenes en el paso 1
define('_OAUTH_TOKEN_SECRET','tuOAuthTokenSecret'); //La obtenes en el paso 1
 
		$bit=tinyurl($link); //reducimos el link con la api de bit.ly
		$quedan=(140-strlen($bit))-4; // calculo los caracteres restantes que me quedan para publicar restando los puntos suspensivo
		$mensaje=substr($mensaje,0,$quedan).' ...'.$bit; // corto el mensaje en caso de que sea muy largo
 
//declaramos la función que realiza la conexión a tu aplicación de twitter
		function getConnectionWithAccessToken() {
                    $connection = new TwitterOAuth(_CONSUMER_KEY, _CONSUMER_SECRET,_OAUTH_TOKEN, _OAUTH_TOKEN_SECRET);
                   return $connection;
                }
//Realizamos la conexión
$connection = getConnectionWithAccessToken();
//Publicamos el mensaje en twitter
$twitter=$connection->post('statuses/update', array('status' =>utf8_encode($mensaje)));
 
//Función para acortar URL con bit.ly . Primero debemos registrarnos en http://bit.ly para obtener clave api y usuario
 function tinyurl($url_larga){
$tiny = "http://api.bit.ly/v3/shorten?login=TuUsuario&apiKey=tuClaveApi&format=txt&longUrl=".$url_larga;
$sesion = curl_init();
curl_setopt ( $sesion, CURLOPT_URL, $tiny );
curl_setopt ( $sesion, CURLOPT_RETURNTRANSFER, 1 );
$url_tiny = curl_exec ( $sesion );
curl_close( $sesion );
return($url_tiny);
}

Resumiendo:

  • Creamos aplicación en Twitter Apps
  • Elegimos Client como Application type y le damos permisos de Read & Write
  • Obtenemos Consumer Key , Consumer Secret , Access Token(OAuth access token) y Access Token Secret(Oauth token secret)
  • Descargamos la librería twitteroauth.php y oauth.php desde aquí y los subimos al server
  • Por último creamos el mensaje y la url corta para actualizar nuestro estado.

Espero que hayan entendido bien el tutorial porque la verdad lo hice corriendo y con la comida en el horno xD . Cualquier duda dejen sus comentarios. Saludos!!

UPDATE 1: Cometí algunos errores al escribir el código del tutorial. Estas lineas :

1
2
3
function getConnectionWithAccessToken() {
$connection = new TwitterOAuth('_CONSUMER_KEY', '_CONSUMER_SECRET',$oauth_token, $oauth_token_secret );return $connection;
                }

Hay que cambiarlas por las siguientes:

1
2
3
4
function getConnectionWithAccessToken() {
                    $connection = new TwitterOAuth(_CONSUMER_KEY, _CONSUMER_SECRET,_OAUTH_TOKEN, _OAUTH_TOKEN_SECRET);
                   return $connection;
                }

Yo ya lo corregí en el tutorial, pido mil disculpas , pero como comente en su día este post lo hice bastante apurado.

UPDATE 2: Para los que obtienen el error de [error] => Incorrect signature al usar caracteres especiales como acentos (á,é ,etc) deben realizar el siguiente cambio.

Cambiando esta linea:

1
$twitter=$connection->post('statuses/update', array('status' =>$mensaje));

Por:

1
$twitter=$connection->post('statuses/update', array('status' =>utf8_encode($mensaje)));

También cree una aplicación para mi cuenta de twitter antigua, así pueden probar que en realidad funciona y mandar un mensaje y url. La página en cuestión es http://masquewordpress.com/ejemplos/actualizar-twitter-php-oauth/

Pueden ver su mensaje en mi vieja cuenta de twitter.

O pueden seguirme en mi nueva cuenta 😀

Damián Logghe

Programador freelancer y emprendedor en sueños. Contento de ser mi jefe y poder hacer lo que me gusta. WordPress es mi principal fuente de ingreso y me escribo tanto para ayudar como para tener una guia de memoria. Quieres contratarme? Déjame un mensaje.

More Posts - Website

Follow Me:
TwitterFacebookLinkedInGoogle Plus