La boîte à Tutoriels de Christopher PECAUD

Accéder à ses Contacts Google avec Xojo

Laisser un commentaire

SOMMAIRE

I.Introduction
II Ouverture d’un compte Développeur via la console développeur Google
III Codage de l’application
IV.Conclusion

I Introduction

Je vous propose aujourd’hui un tutoriel permettant d’utiliser les Google API avec Xojo afin de vous permettre de récupérer des informations sur vos contacts Google. Pour ce faire il y a quelques prérequis à assurer avant de pouvoir réaliser cette opération. Nous verrons donc dans un premier temps les étapes nécessaires pour pouvoir ensuite accéder aux différentes API de Google, dans une application installée sur un ordinateur ou sur un appareil mobile via l’API oAuth 2.0.

Nous verrons ensuite comment récupérer des informations concernant les contacts importés de Google en utilisant JSON.

II Ouverture d’un compte Développeur via la console développeur Google

Pour accéder aux API de Google vous êtes maintenant obligés de passer par cette étape. Pour ce faire il faut aller vers ce lien et créer un nouveau compte si vous n’en aviez pas avant il suffit ensuite de créer un projet. Une fois le projet créer, il suffit ensuite de spécifier les APIs dont vous aurez besoin pour votre projet. Dans notre cas il s’agit de la Google Contacts API. Donc il suffit de mettre l’état de cette API sur la valeur « ON ». Concernant l’utilisation de cette API on a le droit à un quota de 20000000 de requêtes par jour. Ce qui est largement suffisant pour un usage personnel ou même une petite application à usage restreint. Au cas où ce quota viendrait à être dépassé vous devriez remplir des informations commerciales accessibles dans l’onglet « Settings » et dans la section « Billing ».

Maintenant il vous faut ensuite créer des informations qui vous permettront d’utiliser les APIs oAuth 2.0. Il faut créer un Id de Client. Cet élément est créé via l’onglet « Credentials ». Les informations que nous trouvons après la génération sont très importantes car elles vont être utilisées dans le code pour effectuer l’opération d’authentification.

Une dernière chose à réaliser est de créer un écran de consentement qui sera affiché lorsqu’un utilisateur voudra accéder à cette API depuis votre application, celui-ci est créé en cliquant sur la commande « Consent Screen ».

Une fois ces opérations réalisées, nous pouvons enfin passer à la partie codage de l’application.

III Codage de l’application

Maintenant que les prérequis ont été réalisés, il va falloir maintenant coder l’application pour pouvoir dans un premier temps s ‘authentifier à votre compte Google via l’API OAut 2.0. Et dans un second temps nous allons récupérer le token d’accès retourner par la précédente requête. Ensuite nous pourront demander des informations sur nos contacts.

Donc dans un premier temps il faut envoyer une requête à l’adresse : https://accounts.google.com/o/oauth2/auth

Avec les paramètres suivant le client_id, et l’uri de redirection que vous avez obtenu lors de la création de votre id ainsi que le scope.


Cette première requête doit être effectuée par l’intermédiaire d’un navigateur, il suffit donc d’ajouter un composant HTMLViewer dans une fenêtre externe et de mettre un bouton sur votre fenêtre principale qui permettra d’afficher la fenêtre avec le navigateur mis à jour. Il est très important que vous placiez ce composant sur une fenêtre vous comprendrez pourquoi très rapidement. Dans la partie code il vous suffit d’utiliser cette ligne pour se diriger vers l’adresse d’authentification :


Je vous conseille de créer des variable client_id, client_secret, et redirect_uri quiseront utilisées plus tard dans le code. Ces variables sont de type String. Le code suivant est à mettre sur une seule ligne...

Form2.HTMLViewer1.LoadURL("https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=" 
                            + client_id 
                            + "&redirect_uri=" +redirect_uri 
                            + "&scope=https://www.google.com/m8/feeds")

Form2 est le nom de ma fenêtre sur laquelle j’ai placé mon contrôle HTMLViewer.

Le reponse_type de type code nous permet de récupérer une réponse de Google sous forme d’un success_code, que l’on utilisera ensuite pour la prochaine requête.

Nous utilisons la fonction ShowModal de la fenêtre pour qu’elle reste au premier plan, jusqu’à ce que Google nous renvoie ce code.


AuthenticationForm.ShowModal

Afin de récupérer le code dans notre programme, il faut que la barre de titre de la fenêtre change en conséquence quand celui-ci est reçu par le navigateur. Donc pour le HTMLViewer ajouter le gestionnaire d’événement (event handler) « TitleChange ». Et dans la partie code, placez les lignes suivantes :

  Title = newTitle
  Window1.code = newTitle

Au préalable il faut que vous ayez créé une nouvelle propriété code de type String associée votre fenêtre parente.


Ainsi une fois que le code a été transmis par Google et que cette propriété a été mise à jour nous pouvons fermer la fenêtre.


Ce code va donc être utilisé maintenant pour demander un token d’accès à l’API Google Contacts.


Nous allons dans un premier temps récupérer et vérifier que la réponse est valide. La réponse doit être formé de cette manière « Success Code=chaine de caractères » Donc nous faisons le test suivant :


if left(code, 13)="Success Code=" then
	‘Code à placer ici
end if

c’est une variable success_code qui va contenir cette valeur :


successCode = right(code, len(code)-13)

Maintenant nous allons avoir besoin d’un socket sécurisé pour envoyer nos futures requêtes vers Google. Nous allons donc utiliser un objet de type HTMLSecureSocket.


 Dim socket As New HTTPSecureSocket

Il va falloir construite une chaine de caractère qui sera envoyée à Google contenant le code que l‘on vient de récupérer, le client_id, le client_secret, l’uri de redirection et le grant_type


chaine = "code=" + successCode + "&client_id=" + client_id+ "&client_secret=" + client_secret + 
                                  "&redirect_uri=" + redirect_uri + "&grant_type=authorization_code"

A partir de là ça se complique un peu. En effet, Comme la requête doit être envoyée par l’intermédiaire d’une méthode « POST », il va falloir qu’on détermine la longueur de la chaîne que l’on vient de créer:


Dim longueurchaine As String = cStr(Lenb(chaine))

Il va falloir ensuite créer les headers grâce à ces lignes de code :

socket.requestHeaders.AppendHeader("Host", "accounts.google.fr")
socket.requestHeaders.AppendHeader("Content-Type", "application/x-www-form-urlencoded") 
socket.requestHeaders.AppendHeader("Content-length", longueurChaine) 

Comme vous pouvez le constater, il nous faut bien un header particulier qui est la longueur du contenu. Si vous ne le fait pas vous aurez le droit à un beau message d’erreur en retour…


Il faut ensuite préparer le contenu à envoyer :

socket.setPostContent(chaine, "application/x-www-form-urlencoded" )

Une fois cette opération réalisée, on peut poster la requête :


 Try
   chaine = socket.Post("https://accounts.google.com/o/oauth2/token",30)
   ContactsArea.Text=chaine
 Catch 
   MsgBox("Erreur")
end try

Comme vous pouvez le voir il faut envoyer la requête à l’adresse https://accounts.google.com/o/oauth2/token


Nous allons ensuite récupérer le contenu que va nous retourner Google. Celui-ci va être stocké dans la variable chaine dont nous affichons le contenu ensuite dans un composant TextArea. Pour exploiter cette chaîne au format JSON, nous créons une instance d’objet JSONItem en lui donnant comme paramètre la chaîne de caractère reçue. Il nous faut au moins récupérer la valeur de la clé « acces_token ». On constitue ensuite une chaîne qui sera envoyée dans une prochaine requête à Google. Ceci est réalisé par ces lignes de code :


Dim item As New JSONItem(chaine)
Dim accessToken As String = item.Value("access_token")
chaine="access_token=" + accessToken + "&alt=json"

Pour envoyer cette requête nous créons un deuxième objet de type HTTPSecureSocket. Et on envoie la chaine que l’on vient de créer par l’intermédiaire d’une requête get.


DIm socket2 As new HTTPSecureSocket
chaine = socket2.get("https://www.google.com/m8/feeds/contacts/default/base?" + chaine, 30)

Vous devez recevoir une réponse de Google contenant la liste de vos contacts sous forme JSON. Au premier abord ce fichier semble complexe à traiter. Voici comment parser le fichier reçu. Tout d’abord comme dans le cas de la dernière requête on crée un objet de type JSONItem avec en paramètre le contenu de la chaine reçue. Ensuite si l’on regarde bien le contenu du fichier, on s‘aperçoit que tous les contacts se trouvent dans le nœud « feed ». A l’intérieur de ce flux nous avons plusieurs nœuds dans le sous-nœud « entry », nous allons les itérer l’un après l’autre pour récupérer les titres et les adresses email associés à chaque contact… Pour descendre dans chaque nœud nous sommes obligés de créer à chaque fois un objet de type JSONItem avec en paramètre le nœud parent. Il faut ensuite utiliser une boucle pour récupérer toutes les propriétés voulues pour chaque contact. Si l’on veut par exemple récupérer le nom complet du contact il faut récupérer la valeur associée à la clé « $t » du sous nœud « title ». De même pour l’adresse email, il faut récupérer chaque valeur associée à la clé « address » des nœuds enfant à celui nommé «gd$email ». En effet chaque conatact peut avoir plusieurs adresses mail. Voici les lignes de code permettant de réaliser ces opérations :


Try
      Dim feeds As Integer = contactItem.Count
      Dim node As JSonitem = contactItem.Value("feed")
      Dim entrynode As Jsonitem = node.Value("entry")
      
      For i As integer = 0 to entrynode.Count - 1 
        Dim contactlistnode As Jsonitem = entrynode.Child(i)
        Dim contacttitlenode As JSONItem = contactlistnode.Value("title")
        Dim contacttitle As String  = contacttitlenode.Value("$t")
        
        Dim contactemailnode As JSONItem = contactlistnode.Value("gd$email")
        Dim contactemailtable As  JSONItem = contactemailnode.Child(0)
        Dim contactemail As String = contactemailtable.Value("address")
        ContactsArea.AppendText(chr(13) + contacttitle + chr(13) + contactemail)
        
      Next
      
      
    catch exc As KeyNotFoundException
      MsgBox(exc.Message)
    end try
 

IV Conclusion

A travers ce tutoriel nous avons vu qu’il était possible de récupérer ses contacts issus des applications Google (Google Contacts en l’occurrence). Nous avons vu qu’il y avait toute une étape assez longue nous imposant de nous authentifier sur la plateforme Google. Ce tutoriel vous a d écrit les différentes étapes utiles pour réaliser l’import de vos contacts dans une application Xojo. Ces informations sont bien sûr utiles si vous voulez utiliser d’autres applications Google nécessitant une authentification à l’aide de la technologie Oauth 2.0.

Top