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 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").
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"]);
}
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.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...