Enviar mensajes a Twitter desde PHP y el API de Twitter

  • Por
  • PHP
Cómo enviar mensajes a una cuenta de Twitter desde tus propios scripts PHP y utilizando el API de Twitter.
Seguramente que la persona que lea el Manual de trabajo con el API de Twitter desde PHP estará interesada por la funcionalidad que vamos a mostrar a continuación, pues es uno de los pasos más fundamentales de comunicación con el servicio de microbloging. Así que pongámonos manos a la obra y expliquemos cómo enviar mensajes con nuestra cuenta de Twitter desde un script PHP.

Como vimos anteriormente, trabajar con el API de Twitter resulta bastante sencillo cuando utilizas alguna clase PHP que sirva de puente entre el API y tus scripts PHP. Así que nosotros para explicar el API de Twitter estamos utilizando la Twitter Class, un script de código abierto que ya hemos comentado en el artículo Utilizar una librería PHP para trabajar con el API de Twitter.

El paso que queremos explicar, usando la librería Twitter Class, consta de pocas líneas de código. Realmente veremos que el propio envío del mensaje a Twitter es una única sentencia PHP, una llamada al método updateStatus() de la mencionada clase, aunque nosotros hemos adornado este script para darle un poco más de empaque y de paso aprender algunas otras cosas nuevas del API. En concreto, veremos que existen algunos métodos interesantes, implementados en la clase PHP que estamos utilizando, para saber si tenemos conexión con el API de Twitter y si el usuario que hemos utilizado está correctamente autenticado.

Métodos de Twitter Class que vamos a utilizar

Estos son los métodos que no conocemos todavía de la librería PHP para trabajo con Twitter y que vamos a utilizar.

test():
Este método sirve para comprobar si existe comunicación con el API de Twitter. No recibe parámetros y simplemente devuelve un boleano indicando si hay o no conexión.

verifyCredentials():
Este método tampoco recibe parámetros y así como el anterior, devuelve un boleano con el que sabremos si el usuario que ha iniciado sesión con el API está correctamente autenticado. Como podemos imaginar, devuelve true si el login y contraseña corresponden con los de un usuario de Twitter. False si la autenticación no tuvo éxito.

Nota: Recordemos que la autenticación con el API de Twitter se realiza con los datos que se envían al constructor de la clase Twitter Class.
$obj_twitter = new Twitter("usuario","clave");

updateStatus():
El método updateStatus() recibe como parámetro una cadena de caracteres y la envía como post en la cuenta del usuario autenticado. Es decir, envía un mensaje a Twitter con la cuenta del usuario con el que instanciamos la el objeto de la clase Twitter Class. Recordar que el mensaje debe medir como máximo 140 caracteres.

Formulario para mandar un mensaje a Twitter desde PHP

Ahora que ya conocemos los métodos con los que necesitamos trabajar en este ejemplo, veamos el script PHP que podríamos utilizar para enviar mensajes a Twitter. En esta práctica vamos a hacer un formulario que tendrá los campos de autenticación a Twitter y un textarea para escribir el mensaje a enviar.

Al enviar el formulario comprobaremos si hemos recibido los datos de autenticación, si existe conexión con Twitter y si el login del usuario se ha podido realizar correctamente. En caso que todo haya ido bien, se enviará el mensaje.

El código es el siguiente:

<html>
   <head>
   <title>Enviando mensajes a Twitter desde PHP</title>
   </head>
   <body>
      
   
<?php
if (!$_POST || $_POST["user"]=="" || $_POST["clave"]==""){
   //si no recibo datos de formulario, muestro un formulario con los datos a rellenar
   echo '
   
   <form action="' . $_SERVER["PHP_SELF"] . '" method="post">
   Usuario:
   <br>
   <input type="text" name="user">
   <br><br>
   Clave:
   <br>
   <input type="password" name="clave">
   <br>
   Mensaje (140 caracteres como máximo):
   <br>
   <textarea cols=50 rows=3 name="mensaje"></textarea>
   <br>
   <br>
   <input type="submit" value="Enviar">
   </form>
   ';
}else{
   //incluyo la clase Twitter
   include "twitter.php";
   $usuario_twitter = new Twitter($_POST["user"],$_POST["clave"]);
   
   //compruebo si hay conexión con el API de Twitter
   if($usuario_twitter->test()){
      echo "<br>Con conexión con Twitter.";
      //compruebo si el login de usuario/contraseña es correcto
      if ($usuario_twitter->verifyCredentials()){
         echo "<br>Usuario de twitter autenticado correctamente.";
         
         //ENTONCES, VOY A ENVIAR EL MENSAJE
         $usuario_twitter->updateStatus($_POST["mensaje"]);
         
         echo "<p>Mensaje Enviado!!!!</p>";
      }else{
         echo "<br>Usuario de twitter NO autenticado.";
      }
   }else{
      echo "Sin conexión con Twitter.";
   }   
}

?>

</body>
</html>

Esperamos que se entienda fácilmente con los comentarios en el código y con las explicaciones del principio del artículo.

Como se podrá ver, se comprueban varias cosas antes de mandar el post a Twitter, pero todavía lo podríamos complicar un poco más validando también si el string del mensaje no supera los 140 caracteres que permite este servicio de microblogging.

Referencias: Otro detalle que quizás mejorase todavía más este script es mostrar la cuenta de los caracteres escritos en el textarea, que hemos explicado en artículos aparte de DesarrolloWeb.com:

Esperamos que este ejemplo de trabajo con el API de Twitter haya sido de utilidad para los lectores. El siguiente paso que abordaremos será hacer un pequeño cliente de Twitter en PHP con funcionalidades básicas.

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

fernando

23/5/2010
buen ejemplo para usar esta clase
Buen ejemplo para usar esta clase con twitter,

aunque acá -> if (!$_POST | $_POST["user"]=="" | $_POST["clave"]=="")
debería ser -> if (!$_POST || $_POST["user"]=="" || $_POST["clave"]=="")

midesweb

07/6/2010
Error corregido
Hola! Gracias por reportarnos ese error en el script.
Ya lo hemos corregido!

Brunichi

08/6/2010
Error undefined Constant
Hola, probe el script y me sale el siguiente error:

Notice: Use of undefined constant CURLOPT_URL - assumed 'CURLOPT_URL' in C:wampwwwaddt witter.php on line 155

Notice: Use of undefined constant CURLOPT_PORT - assumed 'CURLOPT_PORT' in C:wampwwwadd witter.php on line 156

Notice: Use of undefined constant CURLOPT_USERAGENT - assumed 'CURLOPT_USERAGENT' in C:wampwwwadd witter.php on line 157

Notice: Use of undefined constant CURLOPT_FOLLOWLOCATION - assumed 'CURLOPT_FOLLOWLOCATION' in C:wampwwwadd witter.php on line 158

Notice: Use of undefined constant CURLOPT_RETURNTRANSFER - assumed 'CURLOPT_RETURNTRANSFER' in C:wampwwwaddt witter.php on line 159

Notice: Use of undefined constant CURLOPT_TIMEOUT - assumed 'CURLOPT_TIMEOUT' in C:wampwwwadd witter.php on line 160

Fatal error: Call to undefined function curl_init() in C:wampwwwadd witter.php on line 186

acaso saben porque???. Gracias de antemano, super página!

Brunichi

08/6/2010
Error con clase twitter
Hola, ya repare el error que mencione anteriormente, solo era cuestion de iniciar la extencion culr en el WAMP, pero ahora me sale un nuevo error:


Fatal error: Cannot redeclare class TwitterException in C:wampwwwaad-net witter.php on line 1867

ahi si no se que hacer, espero puedan ayudarme!.

Pedro Jimenez

29/6/2010
La Clase PHP me da un error (warring) en la linea 189
Hola,

He probado toda la aplicación y me da un error en la linea 189 de la clase;


curl_setopt_array() [function.curl-setopt-array]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/sharedsp/domains/toodo.es/public_html/interfaz/tw/twitter.php on line 189

Ya he averiguado el problema, en servidores con PHP en modo safe_mode activado en php.ini, al parecer siempre da este error.

http://www.francesco-castaldo.com/2009/10/warning-curl_setopt-function-curl-setopt-curlopt_followlocation-cannot-be-activated-when-in-safe_mode-or-an-open_basedir-is-set/

Pero la solución que aporta este buen señor del enlace a mi no me funciona.

¿ Alguien más se ha enfrentado a este problema..?

(Lo de modificar php.ini ya lo he pensado pero mi servidor NO me deja).. :-)

Saludos

Noel

05/7/2010
Problemas con API
Por modificaciones en el protocolo de API de Twitter, muchas APIS quedaron en desuso.
Leer mas info aqui:
http://www.nuevastecnologias.com.ar/2010/07/twitter-api-php.html

Puede que este tutorial tambien esté afectado

pedrexh21

28/8/2010
mismo error
Warning: curl_setopt_array() [function.curl-setopt-array]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/a8437238/public_html/twitter.php on line 189

Me imagino que es por lo que dice Noel... Ojala pongan una solución u otra forma de lograr el uso de la api. Saludos.

Mario Nava

02/9/2010
Actualizar el artículo
Estimados webmaster

¿Podrían actualizar éste artículo? Al parecer twitter hizo cambios en la manera de autenticarse, agregó alto llamado OAuth y éste artículo tal cual está ya no funciona. La API que mencionan se actualizó. Pero es algo confuso entender el cambio.

De antemano gracias. La información que he obtenido de aquí es de mucha utilidad

Leon

06/9/2010
Autor de twitter class actualizó
La versión 2.0.1 está corregida para oAuth.

Saludos

Leon

06/9/2010
Twitter Class funciona
La actualización 2.0.1 funciona, pero debes autentificarte con Consumerkey, y Consumer Secret, para usuario y pass.

Luego, debes colocar los datos token que son Access Token (oauth_token), y, Access Token Secret (oauth_token_secret), ambos obtenidos desde My Acces Token del panel de la derecha.

Claro, primero creas una aplicación, la registras, y te entrega los datos, los 4 datos que te mencioné antes.

Lo probé con un script bien simple: que entrega mis entradas, incluyendo la imagen profile:

<?php
// require class
require_once 'twitter.php';

// create instance con customerKey y customerSecret
$twitter = new Twitter('Xj3NAepPrBlFjpDau5fjQ', '7DCBNcpMxOuv8exKN1vWQxj1T4eOTQheRnHUmrAFA4');

//te muestro lo que trae, todo, fíjate en nombre de los campos
var_dump( $twitter ->statusesPublicTimeline());

//el mismo anterior, separado cada entrada, y sólo el texto y foto
foreach( $twitter ->statusesFriendsTimeline() as $linea){

echo "<br>-----<br>";

//nota que el user es el que contiene el campo de la imagen
?>
<img src="<? print_r($linea['user']['profile_image_url']); ?>" />
<?

print_r($linea['text']);

}
?>

me imagino que las otras funciones funcionan parecido, voy a probarlas. Bueno, lo anterior es la función statusesPublicTimeline() contenida en la clase Twitter.

Voy a probar las otras funciones.

Saludos

Emiliano

19/7/2011
Problema con la clase
Eh tenido el mismo problema con la linea 189. Alguien lo soluciono?

Douglas Lopez

11/8/2011
Nueva forma de autentificar en Twitter
Hola a todos, me esta dando el siguiente error:

Fatal error: Uncaught exception 'TwitterException' with message 'Basic authentication is not supported'.

¿Tienen algun ejemplo completo en PHP, por favor, de como llamar a los nuevos API's, de como autentifcar con la nuevas versiones de Twitter". Lo apreciaría grandemente.
Un abrazo,
Douglas

Santiaq

27/9/2011
Contenido Obsoleto
Segun he leido por ahi, esta manera de logar en Twitter es obsoleta, ahora debe hacerse con acceso OAuth