Cliente Twitter 4: Enviar mensajes a Twitter

  • Por
  • PHP
Agregamos funcionalidades para postear mensajes desde el cliente Twitter PHP que estamos realizando.
Está claro que este cliente Twitter es bastante rudimentario y salvo una mera práctica para aprender a manejar el API de Twitter con PHP, no sirve para mucho más. No obstante, para ser un cliente Twitter "completo" por muy básico que sea, debería ofrecernos la posibilidad de enviar mensajes nuestro estado como usuarios de Twitter.

Esta es la cuarta entrega de la serie, con lo que deberías empezar la lectura por el artículo Cliente de Twitter con PHP. En esta ocasión haremos dos mejoras. Primero colocaremos en el pie de página un enlace para ver el listado de mensajes enviados por mi usuario. Además colocaremos también un formulario con un campo donde escribir un mensaje para enviar a Twitter.

El pie de página en el cliente Twitter

Podemos comenzar por actualizar el pie de página de nuestro cliente, en la función pie(), para agregarle el formulario para enviar mensajes y el enlace para ver mis mensajes.

function pie_html(){
   echo '
   <div id="enviarmensaje">
   Enviar Mensaje...
   <form method="get">
   <input type="hidden" name="accion" value="actualizarstatus">
   <textarea name="mensaje"></textarea>
   <br>
   <input type="submit" value="Enviar status">
   </div>
   <div id="pie">
   <a href="' . $_SERVER["PHP_SELF"] . '">Home</a> |
   <a href="' . $_SERVER["PHP_SELF"] . '?accion=tusmensajes">Tus mensajes</a>
   </div>
</body>
</html>
   ';
}

Como se puede ver, el formulario se envía por GET y tiene un par de campos, uno para indicar que la acción a realizar es "enviarmensaje" y otro campo textarea con el texto del mensaje.

Luego fijémonos en el nuevo enlace que hemos creado en la capa con id="pie", que nos lleva a esta página enviando como acción "tusmensajes".

Gestión de 2 acciones nuevas

Esas nuevas acciones las tenemos que definir en el código del cliente.

Para la acción de mostrar los mensajes que he enviado a Twitter haré este código:

//acción para ver mis propios mensajes
$status_usuario = $twi_user->getUserTimeline();
imprime_timeline($status_usuario);
imprime_seguidos();

Nótese que al acceder al método getUserTimeline() sin enviar ningún parámetro, obtengo la línea de mensajes del usuario autenticado.

Para la acción de enviar un mensaje a Twitter haré un código como este:

$twi_user->updateStatus($_GET["mensaje"]);
$status_usuario = $twi_user->getUserTimeline();
imprime_timeline($status_usuario);
imprime_seguidos();

Si os fijáis, se envía el mensaje con el método updateStatus() y luego muestro todos los mensajes de mi usuario enviados anteriormente, tal como se hizo en la acción anterior.

Código completo del cliente Twitter

Para finalizar este artículo, coloco el enlace al cliente Twitter tal como ha quedado hasta ahora.

<?php
/**************************************************
FUNCIONES
**************************************************/

function muestra_formulario_login($datos = array("usuario" => "", "clave" => "")){
   echo '<form action="' . $_SERVER["PHP_SELF"] . '" method="post">';
   echo '<div class="cajaform">';
   echo '<div class="titcajaform">Autentícate en twitter</div>';
   echo '<div class="cuerpocajaform">';
   echo '<div class="nombrecampo">';
   echo 'Nombre:';
   echo '</div>';
   echo '<div class="campo">';
   echo '<input type="text" name="usuario" class="campotexto" value="' . $datos["usuario"] . '">';
   echo '</div>';
   echo '<div class="nombrecampo">';
   echo 'Clave:';
   echo '</div>';
   echo '<div class="campo">';
   echo '<input type="password" name="clave" class="campotexto" value="' . $datos["clave"] . '">';
   echo '</div>';
   echo '<div class="campo">';
   echo '<input type="submit" value="Entrar">';
   echo '</div>';
   echo '</div>';
   echo '</div>';
}

function cabecera_html($datos = array('titulo'=>'Cliente twitter')){
   echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>' . $datos["titulo"] . '</title>
   <link rel="STYLESHEET" type="text/css" href="estilo-cliente-twitter.css">
</head>
<body>
   <h1>' . $datos["titulo"] . '</h1>
   ';
}

function pie_html(){
   echo '
   <div id="enviarmensaje">
   Enviar Mensaje...
   <form method="get">
   <input type="hidden" name="accion" value="actualizarstatus">
   <textarea name="mensaje"></textarea>
   <br>
   <input type="submit" value="Enviar status">
   </div>
   <div id="pie">
   <a href="' . $_SERVER["PHP_SELF"] . '">Home</a> |
   <a href="' . $_SERVER["PHP_SELF"] . '?accion=tusmensajes">Tus mensajes</a>
   </div>
</body>
</html>
   ';
}
function salir(){
   $_SESSION["usu_twitter"] = "";
   $_SESSION["pwd_twitter"] = "";
   session_destroy();
}

function imprime_timeline($datos){
   foreach($datos as $actual){
      echo '<div class="lineastatus">';
      echo '<img src="' . $actual["user"]["profile_image_url"] . '" width=48 height=48 border=0>';
      echo '<div class="textotimeline">' . $actual["text"] . '</div>';
      echo '<div class="nombreusuario"><a href="' . $_SERVER["PHP_SELF"] . '?accion=verusuario&usuario=' . $actual["user"]["screen_name"] . '">' . $actual["user"]["name"] . '</a></div>';
      echo '</div>';
   }
}

function imprime_seguidos($usuario = ""){
   //declaro el uso de la variable global $twi_user porque contiene el objeto Twitter
   global $twi_user;
   
   //evaluo si recibo el usuario como parámetro
   if ($usuario==""){
      //no lo recibo, quiero la lista de mis amigos (seguidos por mi)
      $usuarios_friends = $twi_user->getFriends();
   }else{
      //sí lo recibo, quiero la lista los amigos de ese usuario (seguidos por el usuario)
      $usuarios_friends = $twi_user->getFriends($usuario);
   }
   
   echo '<div class="seguidos">';
   $cont = 0;
   //para todos los usuarios que tengo, muestro su foto con enlace para ver la línea de tiempo del usuario
   foreach($usuarios_friends as $actual){
      echo '<a href="' . $_SERVER["PHP_SELF"] . '?accion=verusuario&usuario=' . $actual["screen_name"] . '">';
      echo '<img src="' . $actual["profile_image_url"] . '" width=48 height=48 border=0>';
      echo '</a>';
      $cont++;
      //sólo voy a mostrar los primeros 50 seguidos
      if($cont > 50){
         break;
      }
   }
   echo '</div>';
}

/**************************************************
PAGINA PROCESO
**************************************************/


//incluyo la librería para trabajo con el API de Twitter
//http://classes.verkoyen.eu/twitter/
include "twitter.php";

//inicio la sesión PHP
session_start();

//comienzo a escribir la página
cabecera_html();

//si quieren terminar la sesión
if ($_GET["accion"]=="salir"){
   salir();
}

//Si recibimos los datos de autenticación por POST, los guardaremos en variables de sesión
if($_POST){
   //recibo datos de formulario
   $_SESSION["usu_twitter"] = $_POST["usuario"];
   $_SESSION["pwd_twitter"] = $_POST["clave"];
}

//compruebo que tengo variables de sesión con el nombre y contraseña
if(!$_SESSION["usu_twitter"] || !$_SESSION["pwd_twitter"]){
   //no hay variables de sesión
   muestra_formulario_login();
}else{
   //tengo variables de sesión de usuario y contraseña
   //creo el usuario de twitter con el nombre de usuario y contraseña de la sesión
   $twi_user = new Twitter($_SESSION["usu_twitter"],$_SESSION["pwd_twitter"]);
   
   //compruebo si hay conexión con el API de Twitter
   if($twi_user->test()){
      //echo "<br>Con conexión con Twitter.";
      
      //compruebo si el login de usuario/contraseña es correcto
      if ($twi_user->verifyCredentials()){
         echo '<div class="mensaje">Usuario de twitter autenticado correctamente - <span class="finaliza"><a href="' . $_SERVER["PHP_SELF"] . '?accion=salir">Finaliza sesión</a></span></div>';
         
         //Ahora puedo trabajar con todo lo que necesite del API
         if (!isset($_GET["accion"])){
            //no tengo acción, muestro el "friends timeline"
            $status_amigos = $twi_user->getFriendsTimeline();
            imprime_timeline($status_amigos);
            imprime_seguidos();
         }elseif ($_GET["accion"]=="verusuario"){
            //Hago la acción "verusuario" que es ver el "user timeline"
            $status_usuario = $twi_user->getUserTimeline($_GET["usuario"]);
            imprime_timeline($status_usuario);
            imprime_seguidos($_GET["usuario"]);
         }elseif ($_GET["accion"]=="tusmensajes"){
            //acción para ver mis propios mensajes
            $status_usuario = $twi_user->getUserTimeline();
            imprime_timeline($status_usuario);
            imprime_seguidos();
         }elseif ($_GET["accion"]=="actualizarstatus"){
            $twi_user->updateStatus($_GET["mensaje"]);
            $status_usuario = $twi_user->getUserTimeline();
            imprime_timeline($status_usuario);
            imprime_seguidos();
         }
      }else{
         echo '<div class="mensajefallo">Usuario de twitter NO autenticado</div>';
         muestra_formulario_login(array("usuario" => $_SESSION["usu_twitter"], "clave" => $_SESSION["pwd_twitter"]));
      }
      
   }else{
      //no había conexión con el api de twitter
      echo '<div class="mensajefallo">Sin conexión con Twitter</div>';
   }   
}

pie_html();
?>

Y acabo ofreciendo el enlace para descarga de este ejemplo.

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

Wolfgang

30/6/2010
Fatal error: Uncaught exception
Seria bueno en la edicion "Cliente Twitter 5" agregar una funcion que indica que los datos del usuario son incorrectos en caso de introducir un login y/o contraseñas errados al tratar de entrar en sesion.

gallegoindomito

25/10/2010
Pues el ejemplo da error...
Hola:

He seguido el artículo, muy interesante para mí que me estoy iniciando el el api este de twitter (Gracias por cierto), y en el ejemplo del enlace me da un error:

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

¿Paso algo por alto?