C# y Twitter 2 parte


Bien, los objetivos que se van a cumplir son los siguientes:

  • Contar los caracteres escritos, para visualizarlos en el label
  • Actualizar mensajes, presionando el Enter en el texto
  • Mostrar nuestros Tweets
  • Mostrar nuestro avatar o imagen
  • Mostrar la línea de tiempo de nuestros Amigos y seguidores.

Para contar o mostrar el total de caracteres escritos en el texto de mensaje, usaremos la propiedad Length del TextBox.Text, ahora para mostrar un conteo regresivo restamos 140 al total de caracteres del texto.

Todo esto lo haremos en el evento TextChanged del texto, para que se actualice cada vez que cambiemos el texto:


private void txtMessage_TextChanged(object sender, EventArgs e)

 {

  lbltotalcaracteres.Text = (140 - txtMessage.Text.Length).ToString();

 }

El label se llama lbltotalcaracteres, y se hace una conversión al resultado a String para que sea mostrado en el Label.Text

 image1

Ahora podemos agilizar las cosas, para que al escribir un mensaje y después presionar Enter se actualice el mensaje, como si hubiéramos hecho clic en el Botón actualizar.

Para hacer esto tenemos que ir al evento KeyDown del texto, para ello seleccionamos el texto y en las propiedades presionamos el icono del rayito, allí se listan todos los eventos del control seleccionado, buscamos KeyDown y hacemos doble clic sobre la lista para que se cree automáticamente el evento

 image2

Para ver que tecla presionamos, usamos el objeto e, que es de tipo KeyEventArgs, el objeto e tiene una propiedad KeyCode, que retorna la tecla presionada, entonces antes hacer lo que queramos hacer, validamos que la tecla presionada sea el Enter, para ello usamos la enumeración Keys que contiene el listado de todas las teclas:

 

private void txtMessage_KeyDown(object sender, KeyEventArgs e)

{

  if (e.KeyCode == Keys.Enter)

  {

  // llamar el código que actualiza el estado

  }

}

Para no repetir código, vamos a crear aparte un método que se llame actualizar, así podemos llamar el método en el botón y al presionar el Enter:

 

private void ActualizarEstado()

  {

  if (!String.IsNullOrEmpty(txtUser.Text) || !String.IsNullOrEmpty(txtPassword.Text))

      {

       twitt = new Twitter(txtUser.Text, txtPassword.Text, "My Twitter");

       if (!String.IsNullOrEmpty(txtMessage.Text))

         {

          try

                 {

                  twitt.Status.Update(txtMessage.Text);

                  MessageBox.Show(this, "El Tweet fue actualizado exitosamente", "Información");

                  txtMessage.Text = "";

                  txtMessage.Focus();

                  }

                  catch (TwitterizerException ex)

                  {

                  MessageBox.Show(this, "Ocurrió el siguiente error: " + ex.Message, "Error");

                  }

            }

           else

           {

                MessageBox.Show(this, "Debes escribir algo como mensaje", "Error");

           }

  }

  else

  {

  MessageBox.Show(this, "Los campos Usuario y Password son obligatorios!", "Error");

  }

}

Ahora modificamos el botón:

private void button2_Click(object sender, EventArgs e)

        {

                ActualizarEstado();

        }

Y nuestro texto quedará así:

if (e.KeyCode == Keys.Enter)

  {

  ActualizarEstado();

  }

Bien, ahora podemos probar:

 image3

 

Ahora vamos a mostrar nuestros Tweets

 Para obtener nuestros Tweets tenemos varias formas, vamos a crear una variable del tipo: TwitterStatusCollection, dicho objeto será una colección donde vamos a guardar los datos obtenidos al llamar el método: UserTimeLine, luego recorremos la colección con un foreach y vamos asignando los campos que queremos al DataViewGrid, este es el código del botón Mis Tweets:

private void button3_Click(object sender, EventArgs e)

  {

  twitt = new Twitter(txtUser.Text, txtPassword.Text, "My Twitter");

  TwitterStatusCollection misTweets = twitt.Status.UserTimeline();

  try

  {

  foreach (TwitterStatus status in misTweets)

  {

   dataGridView1.Rows.Add(status.Created, status.Source, status.Text);

  }

}

catch (TwitterizerException ex)

  {

    MessageBox.Show(this, ex.Message, "Error");

  }

}

Recuerden que debemos inicializar la variable twitt, puesto que antes la inicializábamos al actualizar el estado

Si ejecutamos el código nos presenta un error porque no hemos definido las columnas de DataViewGrid:

 image4

 

Para adicionar columnas al DataViewGrid, nos dirigimos a la vista de diseño y seleccionamos el DataViewGrid y seleccionamos editar las columnas:

 image5

 

Agregamos 3 columnas para la fecha de creación del Tweet, la fuente donde hicimos el Update, y el texto del Tweet:

 image6

 

 La columna Texto la modificamos para que el texto se muestre con la propiedad Wrap, así si el texto es muy grande este se acomoda al tamaño del Campo, para ello modificamos la propiedad DefaultCellStyle y luego la Propiedad WrapMode la dejamos en True:

 image7

 

 Ahora modificamos las propiedades AutoSizeColumnsMode a Fill y la AutoSizeRowsMode a AllCells, para que al mostrar los datos se acomoden al texto, ahora si probamos:

 image8

 

 Jeje que no se note que estaba participando para boletas del Evento 40😛

 Bien, ahora quiero mostrar mi avatar, para ello vamos a crear un PictureBox llamado pbImagen, luego en el código del botón de Mis Tweets vamos a agregar debajo del DataGridView:

dataGridView1.Rows.Add(status.Created, status.Source, status.Text);
pbImagen.Load(status.TwitterUser.ProfileImageUri);

Si probamos:

 image9

 

 Wow que raro, ya había cambiado la imagen, con razón no me dieron boletas de los 40 principales jeje, por tener el icono de Radioactiva.

 Pero la imagen que se ve es muy pequeña😦, lo que se trae en ProfileImageUri, es la dirección de la imagen, en mi caso es:

http://a1.twimg.com/profile_images/406321248/twitterProfilePhoto_normal.jpg

Para mostrarla más grande solo necesitamos cambiar la palabra normal por bigger, para que quede así:

http://a1.twimg.com/profile_images/406321248/twitterProfilePhoto_bigger.jpg

Entonces lo que hacemos es un simple Replace:

Creamos una variable String para tener la dirección de la imagen, luego aplicamos el Replace y el código quedará así:

dataGridView1.Rows.Add(status.Created, status.Source, status.Text);

String imagen = status.TwitterUser.ProfileImageUri.Replace("normal", "bigger");

pbImagen.Load(imagen);

 

 image10

 Ahora está más grande😀

 Pero también queremos mostrar los últimos Tweets de nuestros amigos y seguidores, para ello creamos otro DataGridView y un botón para mostrarlos:

 image11

Los campos que vamos a mostrar en el nuevo DataViewGrid son:

–          Imagen Usuario

–          Usuario

–          Tweet

Entonces modificamos las columnas del DataViewGrid, ahora con la diferencia del anterior, de que habrá una columna de tipo DataGridViewImageColumn:

 image12

 El código del Botón va a ser muy parecido al de Mis Tweets, con la única diferencia de que la colección que vamos a obtener es FriendsTimeLine, entonces el código quedará así:

private void button1_Click(object sender, EventArgs e)

{

twitt = new Twitter(txtUser.Text, txtPassword.Text, "My Twitter");

TwitterStatusCollection friends = twitt.Status.FriendsTimeline();

try

   {

     foreach (TwitterStatus status in friends)

      {

        dataGridView2.Rows.Add(status.TwitterUser.ProfileImageUri, status.TwitterUser.ScreenName, status.Text);

       }

   }

   catch (TwitterizerException ex)

   {

      MessageBox.Show(this, ex.Message, "Error");

   }

}

 No ejecuten la aplicación todavía, puesto que saldrá un error, porque estamos asignando un String (la dirección de la imagen) a un campo Image,  para solventar este problema, tenemos que declarar una variable tipo PictureBox, luego cargar la URL y enviar la imagen a la grilla, así:

private void button1_Click(object sender, EventArgs e)

{

  twitt = new Twitter(txtUser.Text, txtPassword.Text, "My Twitter");

  TwitterStatusCollection friends = twitt.Status.FriendsTimeline();

  PictureBox imagen = new PictureBox();

  try

  {

   foreach (TwitterStatus status in friends)

    {

     imagen.Load(status.TwitterUser.ProfileImageUri);

    dataGridView2.Rows.Add(imagen.Image, status.TwitterUser.ScreenName, status.Text);

    }

  }

  catch (TwitterizerException ex)

  {

    MessageBox.Show(this, ex.Message, "Error");

  }

}

Y si probamos:

 image13

 

 Acordémonos de limpiar la grilla cada vez que hagamos un llamado para evitar que se agreguen más y más Tweets:

dataGridView2.Rows.Clear();

 Bien, como mejora les queda:

–         Dejar que el campo Usuario sea de tipo Hiperlink, para que al seleccionarlo nos muestre la página del usuario

–          Mostrar el total de Amigos, Seguidores, Tweets

–          Mostrar los detalles de nuestro usuario como Location, Description, URL, etc.

–          Enviar Mensajes Directos a un usuario

–          Y todo lo que se les ocurra

 Para descargar el código AQUI

6 pensamientos en “C# y Twitter 2 parte

  1. Pingback: C-y-Twitter-2-parte : Sysmaya

Deseas comentar o sugerir algo?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s