Icono del sitio Programando a medianoche

Obtener lista de contactos de Gmail

Cada día son más las aplicaciones y sitios que se conectan y consumen servicios de otros proveedores, como Windows Live, Gmail, Yahoo!, Facebook, Twitter, MySpace, etc., por tal motivo me pareció bueno hacer una serie de artículos para explicar cómo utilizar varios de esos servicios desde .NET.

En este primer artículo de la serie voy a explicar cómo obtener la lista de contactos de la cuenta de un usuario de Gmail utilizando su “usuario” y “contraseña”.

Para comenzar cabe mencionar que Google nos provee una API y su correspondiente librería para .NET para facilitar la utilización del servicio “Google Contacts”. Esta librería es parte del paquete “Google Data API”, y el SDK para .NET se puede descargar desde esta dirección: http://code.google.com/p/google-gdata/downloads/list.

Una vez bajado e instalado este paquete necesitamos que nuestro proyecto, el que va a leer las direcciones de correo de la libreta de direcciones del usuario, tenga la referencia a tres librerías del paquete antes bajado:

La primera librería es la que nos permite conectarnos al servicio de Google Data, la segunda es la que nos da la posibilidad de consultar y modificar los contactos del usuario, y la última la necesitamos porque algunos tipos de datos (como el e-mail) están declarados como clases en ella.

Ahora bien, con nuestra aplicación referenciando a estas DLLs ya podemos consultar los mails, simplemente tenemos que utilizar la clase ContactsRequest la cual utiliza la clase RequestSettings para establecer el usuario y clave, luego solamente hay que leer la información obtenida. Pero como 10 líneas de código valen más que 1000 palabras, acá les dejo un método que, suministrándole un usuario y contraseña, nos devuelve la lista de contactos con su e-mail:

using System.Collections.Generic;
using Google.Contacts;
using Google.GData.Client;
using Google.GData.Extensions;

public static class GMail
{
    /// <summary>
    /// Datos de una cuenta
    /// </summary>
    public struct Account
    {
        /// <summary>
        /// Nombre de la cuenta
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        /// Dirección de correo de la cuenta
        /// </summary>
        public string Address { get; set; }
    }

    /// <summary>
    /// Nos devuelve la lista de contactos con su e-mail
    /// </summary>
    /// <param name="Account">Cuenta de correo del usuario</param>
    /// <param name="Password">Contraseña</param>
    /// <returns>Lista de contactos</returns>
    public static List<Account> GetContacts(string Account, string Password)
    {
        List<Account> objResult = new List<Account>();
        RequestSettings objRS = new RequestSettings("Aplicación de ejemplo", Account, Password);
        ContactsRequest objCR = new ContactsRequest(objRS);

        Feed<Contact> objFeed = objCR.GetContacts();
        foreach (Contact objContact in objFeed.Entries)
            foreach (EMail objEmail in objContact.Emails)
                objResult.Add(new Account()
                {
                    Title = objContact.Title,
                    Address = objEmail.Address
                });

        return objResult;
    }
}

Espero que les sea de utilidad.
Suerte!

Salir de la versión móvil