Cliente Twitter 3: Listado de usuarios seguidos

  • Por
  • PHP
Cómo incorporar a nuestro cliente Twitter un listado de los usuarios seguidos.
Estamos creando un cliente Twitter en PHP y en esta tercera parte vamos a aprender a trabajar con los usuarios que nosotros seguimos. La idea es mostrar el listado de usuarios seguidos en dos lugares.

1.- Por un lado, en la portada del cliente web, una vez autenticados, donde aparece la lista de mensajes de estado de mis amigos, queremos colocar también un listado de todos los usuarios a los que sigo.

2.- Por otra parte, cuando mostramos la línea de mensajes de un usuario en particular, queremos que aparezca también el listado de los seguidos por ese usuario.

Para esto, vamos a actualizar el código que ejecutamos en función de la acción recibida por GET:

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

Como se puede ver, sólo hemos agregado un par de llamadas a la función imprime_seguidos(). En en el caso de que no haya definida acción, llamamos a imprime_seguidos() sin parámetro, con lo que señalamos nuestra intención de ver las personas a las que sigue el usuario autenticado. En el caso de la acción con valor "verusuario" invocamos imprime_seguidos enviando el nombre de un usuario, con lo que la función nos mostrará los seguidos por ese usuario.

Función para mostrar los seguidos por un usuario de Twitter

Ahora veamos el código de la función imprime_seguidos(), para mostrar los usuarios a los que sigue el usuario autenticado o los seguidos del usuario recibido por parámetro.

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

En la función utilizamos el objeto Twitter creado cuando hicimos la conexión con el API, que estaba entre las variables globales. Como primer paso conseguimos el array de seguidos con el método getFriends() del objeto Twitter. Pero lo hacemos de manera distinta, dependiendo de si se recibió o no un nombre de usuario como parámetro (si el usuario no era la cadena vacía).

Luego en un foreach se recorre ese array para mostrar el icono de todos los usuarios seguidos, con un enlace hacia la página para mostrar su timeline.

Código completo del Cliente Twitter hasta el momento

Hasta este artículo nuestro cliente Twitter tiene este código PHP.

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

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"]);
         }
            
      }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 te interesa, puedes descargarte un Zip con el código.

En el siguiente artículo completaremos el cliente Twitter con funcionalidades para el envío de mensajes al status del usuario.