Agradezco tus comentarios

Me encantaría conocer tus impresiones acerca de los distintos ejemplos o artículos de este blog, si te es posible deja un comentario en mi libro de visitas. En cambio para preguntas o problemas con alguno de los ejemplos, te ruego me las formules en el foro de Access en grupos Emagister o en en el foro de Access y VBA.

miércoles, 11 de noviembre de 2009

Los contactos de Google desde Access

Hoy 15 de Noviembre de 2009 actualizo este ejemplo, dado que el original presentaba diversos problemas, si ya te lo habías bajado, para compensarte en este incluyo una gestión total de contactos. Obtener todos los contactos de Google, obtenerlos de Outlook, pasarlos de un gestor al otro, copiar, eliminar, crear...etc



En este caso para que puedas probarlo rápidamente he creado una cuenta GMail llamada probandocontactos@gmail.com, para trabajar con tus propios contactos, lo único que debes hacer es cambiar en la tabla Cuentas, este correo y su contraseña por las tuyas.

Si ya conoces alguno de los ejemplos de este blog que utilizan los servicios web de Google, habrás comprobado que para ello utilizo el control msinet.ocx para poder interactuar con el servidor, pero da algunos problemas de registro en ocasiones, por tanto he decidido no utilizarlo más.

En este ejemplo utilizaremos el objeto MSXML2.XMLHTTP, no lo había hecho antes porque no lo conocía, he aprovechado este ejemplo para comprender un poco este objeto y lo cierto es que me ha sorprendido muy gratamente por su relativa sencillez de uso.

Empezamos por declararlo, si activamos la referencia a Microsoft XML, vX, podemos declararlo como objeto MSXML2, en caso contrario podemos hacerlo como Object, pongámonos en este caso, le voy a llamar objHttp por tanto lo declaramos así.
Dim objHttp As Object
Necesitamos crear el objeto, para ello utilizamos:
Set objHttp = CreateObject("MSXML2.XMLHTTP")

Ya podemos acceder a sus métodos y propiedades,podemos utilizar "GET", "POST", "PUT", "DELETE" para enviar nuestras instrucciones al servidor de Google.

Podemos utilizar setRequestHeader para enviar las cabeceras, responsetext, responsebody, responsestream, responsexml para obtener la respuesta del servidor, también podemos utilizar status y statustext para saber si la respuesta es correcta o no.

De una forma básica para obtener la autorización a utilizar los servicios de Google lo haríamos de esta forma:

A la variable de texto strformdata le asignamos, nuestro EMail, nuestro Password, el origen, que puede ser cualquier nombre que deseemos y el servicio al que queremos acceder, en el caso de los contactos "cp".

strformdata = "Email=" & myEmail & "&Passwd=" & myPassword & "&source=" & mySource & "&service=cp"

Establecemos en la variable strUrl la dirección a la que tenemos que conectar para la autentificación.

strURL = "https://www.google.com/accounts/ClientLogin"

Establecemos el método, en este caso "POST" y abrimos el objeto con la url deseada, el parámetro True o False determina si la conexión va ser asíncrona o no.
objHttp.Open "POST", strURL, False

Establecemos las cabeceras que vamos a enviar (este tema viene bien explicado en la API)

objHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHttp.setRequestHeader "GData-Version", "3.0"

Y por fin enviamos con el contenido de nuestra solicitud de conexión

objHttp.Send (strformdata)

Si en responsetext encontramos BadAuthentication es que la contraseña no vale, en caso contrario podríamos continuar enviando peticiones.

If InStr(objHttp.responsetext, "BadAuthentication") Then
MsgBox "Google ha rechazado la contraseña. Confirma el e-mail y el password y prueba otra vez.", vbCritical, "Error"
Exit Sub
End If

Con pequeñas variaciones este es el método que utiliza el ejemplo que adjunto para crear, modificar o eliminar contactos de Google.

El enlace al ejemplo aquí

5 comentarios:

  1. Amigo quiero probar esto pero el ejemplo ya no existe

    ResponderEliminar
  2. Buen día el enlace no funciona. Podrias actualizarlo?

    ResponderEliminar
  3. por favor sube nuevamente el archivo, el enlace no funciona !!, please

    ResponderEliminar
  4. Please, give us a working link.
    Seems a very good job. I tried to do it with your suggestions but it's too complex to me.

    Thank you

    ResponderEliminar