Cliente Twitter 2: Timeline del usuario autenticado o de otros usuarios

  • Por
  • PHP
Segunda parte del desarrollo de un cliente Twitter en PHP, en el que mostramos cómo hacer el timeline del usuario autenticado o los últimos post públicos de cualquier otro usuario.
En la primera parte de esta serie de artículos se comenzaron las explicaciones para crear un cliente Twitter en PHP. En concreto nos centramos en el sistema de autenticación en el API de Twitter que utilizaremos para nuestro cliente.

En esta ocasión vamos a ir un poco más lejos, con una actualización bien sencilla, pero que también resultará bastante operativa para comenzar. Se trata de que, una vez se ha comprobado que ya tenemos un usuario autenticado correctamente en Twitter, se muestren los últimos mensajes de los usuarios a los que sigue, tal como aparecen los mensajes en la portada de Twitter cuando entramos con nuestro propio usuario.

Y ya de paso, en el listado de mensajes de estatus de mis amigos ("Friends Timeline"), vamos a crear un enlace, en los nombres de los usuarios que seguimos, para irnos al listado de los mensajes de ese usuario en concreto ("User Timeline").

Nota: la línea de mensajes de una persona se conoce como "Timeline". En la portada de Twitter aparece un listado de los últimos mensajes de los usuarios a los que seguimos y eso se conoce como "Friends Timeline". Por otra parte, podríamos ver la línea de tiempo de un único usuario en concreto, para ver todos los mensajes de estatus enviados por una persona, lo que se conoce como "User Timeline".

Gestión de las acciones deseadas hasta el momento

Como decíamos, en la medida de lo posible, vamos a intentar colocar todo el código PHP en un único archivo, por lo que, para solicitar distintas acciones al cliente vamos a enviar el nombre de la acción por GET, accediendo al mismo script, pero enviando la acción por parámetro.

Haremos lo siguiente para recibir la acción por GET y ejecutar cada una de las acciones planificadas hasta la hora:

if (!isset($_GET["accion"])){
   //no tengo acción, muestro el "friends timeline"
   $status_amigos = $twi_user->getFriendsTimeline();
   imprime_timeline($status_amigos);
}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"]);
}

Nota: Debe saberse que seguimos utilizando las herramientas de la librería de acceso a Twitter por PHP, que nos facilitarán bastante la vida a la hora de programar código.

Mostrar un timeline "genérico"

Tanto al mostrar el "friends timeline" como para el "user timeline" utilizamos una función programada por nosotros que se llama imprime_timeline(). Esta función imprime de manera "genérica" cualquier timeline, es decir, le da igual si es un timeline de los amigos o de los usuarios, pues simplemente lo trata como un listado de mensajes de estatus.

El código de esa función es el siguiente:

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>';
   }
}

Como se puede ver, es un simple recorrido a la línea de mensajes y una serie de echo para escribir en la página cada uno de ellos.

Prestemos atención al momento donde se escribe el nombre de usuario autor del mensaje y veremos que hay un enlace que nos lleva al listado de mensajes de ese usuario, pasando por GET el nombre del usuario que se desea ver y el nombre de acción "verusuario".

Cliente Twitter hasta el momento

Para apreciar los lugares donde hemos añadido estos nuevos códigos en el cliente Twitter podemos ver el código fuente completo del ejercicio hasta el momento:

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

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>';
   }
}

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

Si lo deseas, ponemos a tu disposición la descarga del código PHP de este ejemplo, junto con la hoja de estilos que vamos a utilizar y la librería Twitter Class de PHP0.

A continuación veremos cómo hacer un listado de los usuarios seguidos por el autenticado o por cualquier otro usuario de 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