Cliente de Twitter con PHP

  • Por
  • PHP
Explicamos cómo hacer un cliente de Twitter en PHP. Comenzamos el desarrollo del sistema de autenticación del usuario en el API de Twitter y el almacenamiento de sus datos de sesión.
En este artículo comenzaremos un pequeño proyecto de desarrollo basado en Twitter que nos servirá para practicar todo lo que venimos aprendiendo en el Manual del API de Twitter con PHP. Queremos hacer un cliente Twitter con PHP, es decir, una página web que permite realizar las tareas que hacemos con la propia página de la red social, postear mensajes, navegar entre los usuarios que seguimos, etc.

Construir un cliente Twitter es relativamente sencillo si utilizamos una librería para comunicar con Twitter, como la clase Twitter de PHP que explicamos en artículos anteriores. No obstante, para simplificar las cosas iremos poco a poco, agregando funcionalidades a lo largo de diversos artículos. Ahora comenzaremos con la creación de un sistema para hacer login en Twitter y almacenar los datos de acceso en variables de sesión.

Autenticación en el API de Twitter

La mayoría de las cosas que vamos a querer realizar con el API de Twitter en este cliente requieren que un usuario tenga iniciada la sesión en Twitter, utilizando los mismos datos de login que los que usa en la red social. Por ello vamos a comenzar reduciendo el script a lo relacionado con el login en Twitter.

Nota: Las líneas generales de autenticación ya las vimos en el artículo anterior, en el que enviamos un mensaje a Twitter desde una página PHP, ya mostramos cómo hacer un sistema de login y cómo comprobar en la librería PHP si el usuario es válido.

El cliente lo crearemos en un único archivo PHP con la siguiente lógica principal:

Comenzamos por el inicio de sesión PHP.

session_start();

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"];
}

Cada vez que se acceda a la página comprobaremos si tenemos datos de autenticación en las variables de sesión.

//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{
   //accedo a Twitter con esos datos de autenticación
   //... resto de acciones del cliente Twitter
}

Si no había variables de sesión, mostraremos un formulario para el login. Si había, podemos intentar acceder a Twitter con esos datos y realizar acciones para dar vida a nuestro cliente Twitter.

La autenticación en Twitter la realizamos por medio de la librería PHP Twitter Class, con un código como este:

$twi_user = new Twitter($_SESSION["usu_twitter"],$_SESSION["pwd_twitter"]);
//compruebo si hay conexión con el API de Twitter
if($twi_user->test()){
   //Hay conexión con Twitter
   //compruebo si el login de usuario/contraseña es correcto
   if ($twi_user->verifyCredentials()){
      //Usuario válido, Ya hemos iniciado el acceso al API
   }else{
      //Usuario no existente. No podemos acceder con ese usuario
   }
}else{
   //no hay conexión con el API. Verifica tu conexión a Internet
}

Con esto ya tenemos una idea básica sobre la lógica de autenticación que vamos a poner en práctica en nuestro cliente Twitter.

Código del cliente Twitter hasta el momento

Aparte del proceso de autenticación, nuestro cliente Twitter tiene otra serie de detalles que no tienen tanto que ver con la librería del API de Twitter, y más bien con el desarrollo de aplicaciones PHP en general. Al código anterior para esta primera versión del cliente Twitter hemos incorporado un poco de estilos CSS, un botón para cerrar la sesión, un par de funciones para escribir la cabecera del cliente y el pie, etc.

<?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="pie">
   <a href="' . $_SERVER["PHP_SELF"] . '">Home</a>
   </div>
   
</body>
</html>
   ';
}
function salir(){
   $_SESSION["usu_twitter"] = "";
   $_SESSION["pwd_twitter"] = "";
   session_destroy();
}

/**************************************************
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>';         
      }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();
?>

Para que funcione, recordar que es necesario tener la librería Twitter Class PHP y asignarle la ruta a ese archivo en esta línea de include:

include "twitter.php";

Podemos descargar el código PHP de este ejemplo, junto con la hoja de estilos que vamos a utilizar.

La verdad es que sólo con el módulo de autenticación no sirve para mucho este cliente web, por lo que puedes pasar al siguiente artículo, donde veremos cómo mostrar los últimos mensajes de los usuarios que sigues en Twitter.

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

van_nelsonroy

08/6/2010
autenticacion oauth
no se supone que dentro de unos pocos dias twitter solo aceptara la autenticacion con oauth

fernando

08/6/2010
muy buen artículo
Muy buen artículo!!, el código me funciona bien al logear y todo.
Pero tengo el siguiente problema cuando finalizo la sesión o escribo mal los datos de login, me envía este mensaje:

Fatal error: Uncaught exception 'TwitterException' with message 'No username or password was set.' in................

Saludos..