** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Listar contactos de google en access
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoListar contactos de google en access

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Tema: Listar contactos de google en access
    Enviado: 28/Julio/2019 a las 23:00
Hola

Hay alguna forma de listar, por ejemplo en un cuadro de lista los contactos de google??

Estoy mirando algo de APIs, pero me cuesta mucho entenderlo...
https://developers.google.com/contacts/v3/

Saludos
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 29/Julio/2019 a las 13:16
Google exige la arquitectura  OAuth2 para validar ingreso a su API. Este modelo de autenticacion consta de un intercambio entre cliente y servicio de informacion inicial como usuario, clave y el ID de la aplicación y/o token.
El ingreso desde una aplicación web es un poco menos complicada, pero tratándose desde una aplicación de escritorio como MAcces, es necesario tener una página web donde realizar ese intercambio de claves. Si el usuario y clave es válido, te regresa un tomen. Luego ese token lo envías nuevamente acompañado del acople o permisos solicitados, y se abre un cuadro de diálogo donde autorizas a esa aplicación el acceso a tu cuenta, y como si fuera poco, el token es válido por unos minutos.
Este esquema varía de un servicio a otro. Me refiero que Mailchimp o Square o Quickbook tienen un proceso muy similar pero a veces exigen más o menos requisitos, heladeras, etc.
En cuanto al tiempo válido del token, debes crear una rutina para refrescar y prolongar la validez del mismo.
Debes empezar por la consola de Google y activar el servicio, tomar el token, aplicación ID y el secret.
Luego indicar una URL para los webhooks, que será donde Google enviará las autorizaciones y tu aplicación de maccess leerá , para completar el ciclo de intercambio para la autorizacion.
Es un tema fascinante que requiere de varias noches.
Comienza. Ya encontrarás la manera. Yo trataré de ayudarte en cuanto tenga algunos minutos libres.
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 29/Julio/2019 a las 13:20
Hay otra manera que desconozco y creo nunca usaré. Instalando librerías en cliente. No me gusta por el tema de las actualizaciones y además requiere de un servidor web corriendo.
Este esquema tiene mucha aceptación, requiere de menos código, ya que las librerías ayudan en el proceso.
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 31/Julio/2019 a las 13:49
Me he animado y en dos noches de al menos 3 horas cada una, he logrado con muy pocas líneas, la autenticación desde Maccess.
No hay documentación clara para la API de contactos, pero sin duda lo lograre.
OAuth2 es una capa entre una aplicación como lo puede ser Microsoft access o cualquier web y un servicio.

Yo he creado una aplicación en el panel de Google en la cual indico una URL a donde el servicio me enviará en primer lugar el código una vez que haya ingresado como usuario de Google. En la URL tengo un script básico que imprime en el cuerpo lo que envie Google, información que tomo desde la mdb.
Con ese código y mis credenciales, realizo otra solicitud para recibir un token. Ese token tiene un tiempo de validez. Lo ideal es almacenar en una tabla esa información para luego refrescar el token (haciendo otra llamada a la api)y poder continuar sin tener que autenticar me de nuevo.

Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 03/Agosto/2019 a las 10:05
Stern SmileStern Smile ClapEs algo que a mi me supera y por mucho........si alguien con tu experiencia le cuesta , imaginate a los mortales.

Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 03/Agosto/2019 a las 11:07
Pues el 'sin duda' como que le voy a borrar...no lo he logrado inclusive desde una web, usando la REST API.
De hecho, he estaso leyendo sobre la API People, pero la documentacion es muy mala o no lo entiendo.
Pero continuo con el metodo 'fuerza bruta' y veremos.voy a compartir lo que hasta ahora tengo.
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 06/Agosto/2019 a las 04:03
No hay soporte ni la mas minima ayuda para esta API de Google en cuanto a la arquitectura REST.
Me doy por vencido. Aqui dejo el codigo para autenticacion OAuth2.
Estos pasos son practicamente los mismos para cualquier API. Difiere muy poco una de otra.

De hecho, se puede utilizar para realizar autenticacion de usuario muy robustas, como por ejemplo Okta.
La pagina del lado servidor es basica. Solo recoje el code que envia Google y lo imprime en el cuerpo.
En la linea strData = IE.Document.Body.innerhtml, lo tomo para hacer la solicitud del token.

A continuacion, contenido de la PHP:
<?php
header('Access-Control-Allow-Origin: *');
if($_REQUEST){
    $auth_code = $_REQUEST['code'];
    echo $auth_code;
}
?>




Option Compare Database
'referencias necesarias
'Microsoft Internet Control
'Microsoft Scripting Runtime

Dim MyCall As Object, objHeaders As Object
Dim WithEvents IE As SHDocVw.InternetExplorer
Dim redirect_uri As String, client_id As String, secret_id As String, scope As String, strData As String, strURL As String

Private Sub Command0_Click()
'On Error GoTo lbl_err
Dim code As String
    If IsObject(IE) Then
        Set IE = Nothing
    End If
    Set IE = CreateObject("InternetExplorer.Application")
    strURL = "https://accounts.google.com/o/oauth2/v2/auth?client_id=" & client_id & "&response_type=code&scope=openid%20email&redirect_uri=" & redirect_uri
    IE.Navigate strURL
    IE.Visible = True
   
    Do While IE.Busy
        Me.Caption = "Please, wait..."
    Loop
lbl_exit:
Exit Sub

lbl_err:
Debug.Print Err.Number
Resume lbl_exit
End Sub

Private Sub Form_Open(Cancel As Integer)
redirect_uri = "http://squarelab.solutions/contacts/endpoint.php"
client_id = "#################################.apps.googleusercontent.com"
secret_id = "###########################"
End Sub

Private Sub IE_NavigateComplete2(ByVal pDisp As Object, URL As Variant)
    Debug.Print URL
    If InStr(1, URL, "http://squarelab.solutions/contacts/endpoint.php?code=", vbTextCompare) > 0 Then

        strData = IE.Document.Body.innerhtml
        IE.Visible = False
        IE.Quit
        Set IE = Nothing

        'solicitar el token con la autorizacion (code) recibida. este es el paso 4
        ' descrito en la URL: https://docs.connect.squareup.com/api/oauth/?q=token#post-token
        'Debug.Print getToken(strData)
        getToken (strData)
    End If
End Sub

Function getToken(code As String) As String
strURL = "https://accounts.google.com/o/oauth2/token"
strData = "code=" & code & "&client_id=" & client_id & "&client_secret=" & secret_id & "&redirect_uri=" & redirect_uri & "&grant_type=authorization_code"
'lleno mis headers necesarios
Set objHeaders = New Scripting.Dictionary
objHeaders.Add "Content-Type", "application/x-www-form-urlencoded"
resp = myRequest(strURL, objHeaders, "POST", strData)
Debug.Print resp
'Set JSONresp = JSONConverter.ParseJson(resp)
'If JSONresp.Exists("access_token") Then
'    access_token = JSONresp("access_token")
    'contact_list access_token, CStr(code)
'    MsgBox access_token
'Else
'    MsgBox "No se recibio un token"
'End If
End Function

Function myRequest(strURL As String, ByRef objHeader, strAction As String, data As String) As String
    Set MyCall = CreateObject("WINHTTP.WinHTTPRequest.5.1")
     With MyCall
        .Open strAction, strURL, True ' true es modo asincrono
        If IsObject(objHeader) And objHeader.Count > 0 Then
            For Each itm In objHeader.Keys
                .setRequestHeader itm, objHeader.Item(itm)
            Next
        End If
        .send (data)
        .waitForResponse
        myRequest = .responseText
    End With
    Set MyCall = Nothing
    Set objHeaders = Nothing
End Function
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Enlace directo a este mensaje Enviado: 06/Agosto/2019 a las 16:06
Hola Carlos yo veo mucha ayuda:

https://developers.google.com/contacts/v3/

Saludos.
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 06/Agosto/2019 a las 20:32
Gracias Emilio, pero esa documentación es para API y librerías (SDK), no para REST
Yo me niego a usar SDK y desde maccess no se podría, a menos que habilite servidor web ,descargar las librerías, etc.

Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 15/Agosto/2019 a las 17:41
Se puede cerrar, gracias.  Parece que no es sencillo y a mi me queda enorme este tema.....
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable