miércoles, 16 de junio de 2010 a las 18:50hs por Gustavo Cantero (The Wolf)
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:
- Google.GData.Client
- Google.GData.Contacts
- Google.GData.Extensions
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!
Categoria Interconexión y redes sociales | Etiquetas: Contactos, GData, GMail, Google
No me funciona el código, he instalado las lobrerias de Google y tampoco me van los ejemplos que trae.
Nosotros tenemo este código funcionando en un sitio en línea. ¿Qué error te da?
Saludos.
Muchas gracias por este post. me ha sido de mucha utilidad. saludos.
Hola buenas.
Me funciona correctamente pero ¿Esto se podría realizar con oAuth?¿Sería más seguro?
Un saludo y genial tu blog! ;D
Es verdad que para el usuario final siempre le va a ser más seguro usar autenticación delegada para ingresar su contraseña en un sólo sitio (en este caso en GMail), pero cuando hicimos este artículo (hace 3 años) lo habiamos usado en un proyecto donde, por definición de nuestro cliente, los usuarios ingresaban su usuario y clave de GMail en su sitio.
Saludos.
A fecha actual, ha habido cambios en Gdata y Google Contacts API ?
Buen post pero con estos APIS también puedo modificar, eliminar o agregar nuevos contactos aparte de leerlo ?