Page 1 sur 1

Script récupérer contact google dans sheet

Publié : 10 mars 2024 18:17
par dada
Bonjour,

je débute sous google script et je me suis fait aider par de chatgpt pour le faire.

j'ai commencer un script qui me permet de récupérer les contact google directement dans une feuille Sheets.
il fonctionne mais il ne me remonte pas le champs "service" présent dans le bloc société/entreprise.

voici le code

function getGoogleContacts() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // Effacer les données précédentes
  sheet.clear();
  // Écrire les en-têtes des colonnes
  sheet.appendRow([
    "Name",
    "Group Membership",
    "E-mail 1 - Value",
    "Phone 1 - Value",
    "Address 1 - Formatted",
    "Address 2 - Formatted",
    "Organization 1 - Name",
    "Organization 1 - Service",
    "Organization 1 - Title",
    "Website 1 - Value"
  ]);
  // Récupérer les contacts Google
  var contacts = ContactsApp.getContacts();
  // Parcourir les contacts et les écrire dans la feuille
  for (var i = 0; i < contacts.length; i++) {
    var contact = contacts;
    // Récupérer les informations sur le contact
    var name = contact.getFullName() || "";
    var groupMembership = "";
    var contactGroups = contact.getContactGroups();
    if (contactGroups !== null) {
      groupMembership = contactGroups.map(group => group.getName()).join(", ") || "";
    }
    var emails = contact.getEmails();
    var phones = contact.getPhones();
    var addresses = contact.getAddresses();
    var organizations = contact.getCompanies();
    var websites = contact.getUrls();
    // Déterminer l'organisation
    var orgName = "";
    var orgService = ""; // Déclaré une seule fois
    if (organizations.length > 0) {
      orgName = organizations[0].getCompanyName() || "";
      if (organizations[0].getService && typeof organizations[0].getService === "function") {
        orgService = organizations[0].getService() || "";
      }
      var orgTitle = organizations[0].getJobTitle() || ""; // Déclaré localement
    }
    // Récupérer les valeurs pour chaque champ
    var email1 = emails.length > 0 ? emails[0].getAddress() : "";
    var phone1 = phones.length > 0 ? phones[0].getPhoneNumber() : "";
    var address1 = addresses.length > 0 ? addresses[0].getAddress() : "";
    var address2 = addresses.length > 1 ? addresses[1].getAddress() : "";
    // Utiliser la propriété 'address' pour obtenir l'URL du site Web
    var website1 = websites.length > 0 ? websites[0].getAddress() : "";

    // Écrire les données du contact dans la feuille
    sheet.appendRow([
      name,
      groupMembership,
      email1,
      phone1,
      address1,
      address2,
      orgName,
      orgService,
      orgTitle,
      website1
    ]);
  }
}

Si quelqu'un peut corriger le script ce serait sympa.

Merci

Re: Script récupérer contact google dans sheet

Publié : 12 mars 2024 11:55
par NC_Quentin
Bonjour !

Je suis surpris que ce script fonctionne, étant donné que le service Contacts est déprécié. Lorsque j’ai testé le script, j’ai moi-même eu une erreur, typiquement. Il est recommandé de plutôt utiliser le service People API, mais c’est déjà plus compliqué. Voilà un code relativement "simple" qui fait ce que vous cherchez à faire dans une certaine mesure, mais pour arriver à un résultat très propre, il faudrait rajouter pas mal de lignes de codes :

Code : Tout sélectionner

function getContactInfosIntoSheets() {
  try {
    // On récupère les données, sous la forme d’un JSON
    const people = People.People.Connections.list("people/me", {
      personFields: "names,memberships,emailAddresses,phoneNumbers,addresses,organizations,urls",
      pageSize: 1000,
    });
    // On transforme le JSON en un objet standard
    JSON.parse(people);
    // On récupère connections, qui contient tous nos contacts
    const connections = people.connections;
    // On crée la ligne d’en-têtes
    const headers = ["Names", "Memberships", "Addresses", "Phone Numbers", "Organizations", "URLs"];
    // On crée un tableau connections à partir de chaque contact, et on extrait une liste d’éléments précis de chaque ensemble de propriétés qui constituent un contact
    const result = connections.map(connection => {
      return [
        connection?.names?.map(name => name?.displayName ?? "").join() ?? "",
        connection?.memberships?.map(membership => membership?.contactGroupMembership.contactGroupResourceName ?? "").join() ?? "",
        connection?.addresses?.map(address => address?.formattedValue ?? "").join() ?? "",
        connection?.phoneNumbers?.map(phoneNumber => phoneNumber?.value ?? "").join() ?? "",
        connection?.organizations?.map(organization => organization?.name ?? "").join() ?? "",
        connection?.urls?.map(url => url?.value ?? "").join() ?? ""
      ]
    });
    // On rajoute le headers
    result.unshift(headers);
    // On va inscrire ça sur la feuille active, depuis la cellule A1
    SpreadsheetApp.getActiveSheet().getRange(1, 1, result.length, result[0].length).setValues(result);
  } catch (err) {
    // Si jamais il y a une erreur, on l’affiche
    console.error(err);
  }
}

À noter que pour que ce code fonctionne, il faut ajouter le service PeopleAPI à votre script. Pour cela, dans la barre verticale à gauche, cliquez sur le + de Services, puis sélectionnez Peopleapi, et faites Ajouter. Après cela, le code devrait fonctionner.

En espérant que cela a pu vous aider !
 

Re: Script récupérer contact google dans sheet

Publié : 15 mars 2024 15:52
par Lolowr
Sympa Quentin en effet je l'ai testé ça fonctionne je vais essayer de rajouter les autres champs : Anniversaire ... ,mais API People plutot complexe a utilisé, pour ma part je n'arrive toujours pas à
extraire des données de mes contacts à partir d'un script autonome notamment : Changer les Photos de Profil des Contacts par une autre image ( il me semble qu'il faut convertir l'image en 64 bites )
Cdlt
Laurent