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

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_

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 :


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 !

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