Les fonctions de gestion des contacts Google sont proposées depuis la version 14 de WINDEV. Ces fonctions reposent sur l'API Contacts de Google. Cette API est maintenant dépréciée par Google, et remplacée par la nouvelle API People. L'utilisation des fonctions ggl* liées aux contacts peut donc échouer avec la réponse "Contacts API is being deprecated".
La nouvelle API People n'est pas le prolongement de l'API Contacts. Les structures de données notamment n'ont rien en commun. Il n'est donc pas possible d'adapter les fonctions ggl* existantes, et le type gglContact, afin qu'ils permettent l'utilisation de la nouvelle API People.
Les applications qui récupèrent des contacts Google doivent donc nécessairement être adaptées. Les fonctions ggl* seront à remplacer par des appels de la fonction RESTEnvoie après une authentification.
Les syntaxes des appels sont détaillées sur le site de Google : https://developers.google.com/people/api/rest
Voici un exemple d'appel pour obtenir la liste des contacts :
OAuth2Params est un OAuth2Paramètres Token est un AuthToken
ReqListeContact est un restRequête
RéponseListeContact est un httpRéponse
ListeContact est un JSON
OAuth2Params.ClientID = "<id client>.apps.googleusercontent.com" OAuth2Params.ClientSecret = "<clé>" OAuth2Params..URLAuth = "https://accounts.google.com/o/oauth2/auth" OAuth2Params..URLRedirection = "http://localhost:15000" OAuth2Params..URLToken = "https://oauth2.googleapis.com/token" OAuth2Params..Scope = "https://www.googleapis.com/auth/contacts.readonly"
Token = AuthIdentifie(OAuth2Params) // Réutilisation token possible
ReqListeContact..Méthode = httpGet ReqListeContact..ContentType = "application/json" ReqListeContact.URL = "https://people.googleapis.com/v1/people/me/connections?personFields=names,emailAddresses" ReqListeContact..AuthToken = Token
RéponseListeContact = RESTEnvoie(ReqListeContact)
SI RéponseListeContact.CodeEtat = 200 ALORS
ListeContact = RéponseListeContact..Contenu Trace("Nombre de contacts : "+ListeContact.totalPeople)
POUR nContact = 1 _À_ ListeContact.connections..Occurrence
Trace("Contact "+nContact+"/"+ListeContact.connections..Occurrence) Trace(" >> "+ListeContact.connections[nContact].resourceName)
POUR nListe = 1 _À_ ListeContact.connections[nContact].names..Occurrence
Trace(" Nom "+nListe+"/"+ListeContact.connections[nContact].names..Occurrence) Trace(" >> "+ListeContact.connections[nContact].names[nListe].displayName)
FIN
POUR nListe = 1 _À_ ListeContact.connections[nContact].emailAddresses..Occurrence
Trace(" Adresse email "+nListe+"/"+ListeContact.connections[nContact].emailAddresses..Occurrence) Trace(" >> "+ListeContact.connections[nContact].emailAddresses[nListe].value) Trace(" >> "+ListeContact.connections[nContact].emailAddresses[nListe].type)
FIN FIN
SINON Erreur("Google n'a pas pu traiter la requête : ", RéponseListeContact..CodeEtat, RéponseListeContact..Contenu) FIN
Les types utiles les plus courants sont :
Si l'application doit explorer de nombreuses informations dans les contacts, il sera opportun de faire connaître la structure des fichiers JSON de Google au projet. De cette manière il sera possible de profiter de la complétion de l'éditeur de code, et du POUR TOUT ELEMENT de parcours des tableaux. Cette technique peut s'utiliser pour toute interrogation qui retourne un contenu formaté en JSON :
- exécuter le code ci-dessus, en ajoutant la création d'un JSON avec la réponse :
ListeContact = RéponseListeContact..Contenu fSauveTexte(fRepDonnées()+[fSep]+"GoogleContact.json",RéponseListeContact..Contenu) LanceAppliAssociée(fRepDonnées()+[fSep]+"GoogleContact.json") VersPressePapier(fRepDonnées()+[fSep]+"GoogleContact.json")
- dans les descriptions externes du projet, importer le fichier GoogleContact.json obtenu :

On a alors toute l'arborescence du JSON :

- Déclarer des variables à partir des différents noeuds du JSON :
ListeContact est un JSON <description="GoogleContact"> ListeNom est un JSON <description="GoogleContact.connections.names"> ListeAdresseEmail est un JSON <description="GoogleContact.connections.emailAddresses">
- Utiliser POUR TOUT ELEMENT :
ListeContact = RéponseListeContact.Contenu Trace("Nombre de contacts : "+ListeContact.totalPeople)
POUR TOUT ELÉMENT UnePersonne DE ListeContact.connections POUR TOUT ELÉMENT ListeNom DE UnePersonne.names Trace(ListeNom.displayName) FIN
POUR TOUT ELÉMENT ListeAdresseEmail DE UnePersonne.emailAddresses Trace(ListeAdresseEmail.value+" ("+ListeAdresseEmail.type+")") FIN FIN
|