Google Script - Siret / Sirene

Bonjour tout le monde,
Je fais face à un problème mêlant Google Sheet & Google Script :

Je souhaiterai à partir d’un script google sheets de retourner les infos suivantes depuis un SIREN :

  • Numéro de TVA
  • SIRET
  • Nom de la Raison Sociale
  • Numéro et Rue
  • Code postal et Ville
  • Libellé de l’Activité Principale
  • Catégorie d’Entreprise
  • Date de Création de l’Entreprise

Ayant déjà une base de 20 000 lignes, je souhaiterai mettre à jour cette base avec le SIRET / SIRENE pour réaliser de l’enrichissement de Data.

À partir de ce script :
« function companydetails(siret) {
var url = "https://entreprise.data.gouv.fr/api/sirene/v1/siret/ + siren;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
return [[
data.numero_tva_intra, data.siret, data.nom_raison_sociale,
data.l4_declaree, data.l6_declaree, data.libelle_activite_principale,
data.categorie_entreprise, data.date_creation_entreprise
]];
}

Voilà le problème auquel je me confronte :

Fleche bleu : Résultat non affiché
Flèche rouge : #Erreur

Le fait d’avoir un #erreur m’indique que le n° Siret ou Sirene n’est plus valide ce qui me permet de clean cette base et ce n’est pas forcément un problème.

Le problème étant les cellules des flèches bleus qui ne s’affichent pas. Car en faisant une recherche sur data.gouv :

Je retrouve bien mon résultat souhaité.

Avez-vous un élément de réponses ? Pour pouvoir afficher les données souhaités sur mon googleSheet à partir du script?

Merci de m’avoir lu jusqu’ici, en vous souhaitant une bonne journée.

Hello,

Est-ce qu’il serait possible qu’il y ait trop de requêtes HTTP envoyées, et que par conséquent le script Google prenne trop de temps? Auquel cas, possible que les requêtes n’aboutissent pas complètement et t’amènent à ce type de comportement/erreurs…

1 J'aime

Non ayant bien vérifié ce n’est pas les requêtes qui bloquent le résultat.
-> J’ai rajouté : var response = UrlFetchApp.fetch(url, {‹ muteHttpExceptions ›: true});

J’ai screen pour te montrer le problème.
Regardes bien quand je supprime les colonnes D à K, le message d’erreur : Le résultat n’a pas été développé, pour ne pas écraser les données de E99.

Pour le premier message d’erreur je sais d’où ca provient c’est une question de Siret et non de Sirene et même problème le résultat ne s’affiche pas.

As-tu besoin d’autres éléments ?

La vidéo ne donne rien quand on appuie sur « Lecture », du coup je ne vois rien…

Est-elle lisible ?

Non elle ne l’est pas :confused:

Moi je la vois @ScrapingExpert :innocent:

J’ai essayé sur plusieurs laptop @ScrapingExpert et elle fonctionne aussi de mon coté :thinking:

Je recase mon article (encore une fois, désolé…) mais je traite exactement ce cas dedans, avec le script déjà prêt: https://deux.io/google-scripts/

je pense même que tu as copié le script depuis mon article :slight_smile:

Comme tu peux le voir dans mon script, je fais appelle a l’api du SIREN, et non du SIRET: tu as modifié l’url pour récupérer les données SIRET. Aucun pbl à priori, mais change aussi le nom des variables sinon le script plante ! ton erreur est aussi simple que ca…

Donc change dans le script le nom des champs par ceux que tu veux récupérer dans l’api SIRET et voila, ca fonctionnera.

Une alternative serait que tu prennes les 9 premiers chiffres du SIRET pour reformer le SIREN et utiliser exactement mon script.

Enjoy :slight_smile:

3 J'aimes

Résolu en effet j’avais bien suivis la démarche de ton site Brice :slight_smile:
J’ai pu tout enrichir, les siren je l’ai ai transformé en SIRET :slight_smile:

1 J'aime

Attendez attendez … il n’y a pas besoin de créer de tokens d’api pour accéder à l’API sirene :open_mouth: ? L’appel de l’url est publique et sans authentification ?

of course !!!

Après avoir créé ImportFromWeb pour Google Sheets pour scraper la plupart des sites (même protégés ou avec Javascript), je lance ImportJson.

La fonction est hyper puissante:

  • Cache les résultats pour éviter de faire des requêtes intempestives
  • Convertit les JSON multi-niveaux en une table 2D (ça met les éléments d’un array directement en colonne)
  • Filtre facilement pour naviguer dans la hiérarchie
  • Permet de lancer n’import quelle requête cUrl, donc ça n’échappe à quasiment n’importe quelle requête même celles qui ont besoins de cookies (Pour ça je vais monter un tutoriel très prochainement)

Voilà le lien

C’est encore en beta, donc soyez indulgents!

3 J'aimes

très cool ça @Mapi !

C’est vraiment top ce que vous faites @Mapi et @cebri ! Merci

J’ai réussi à nettoyer ma base d’entreprises (je travaille pour une collectivité) et à mettre à jour le site web !

J’arrive bien à récupérer toutes les infos (merci Brice) et à utiliser la fonction ImportJson pour les afficher :

Je souhaite étendre à toute la liste d’entreprise pour vérifier les adresses, récupérer certaines informations pertinentes (dans l’optique finale de mettre à jour notre CRM)

Je vois bien deux solutions :
1/ Faire une formule par donnée sur le modèle de Brice (pour toutes mes données d’intérêt)
function siret(siret) {
var url = « https://entreprise.data.gouv.fr/api/sirene/v1/siret/ » + siret;
var response = UrlFetchApp.fetch(url);
var json = response.getContentText();
var data = JSON.parse(json);
return [[
data.etablissement.siren
]];
}

2/ Essayer de mieux exploiter l’outil de Mapi pour récupérer les données, les afficher en colonnes (ou en lignes) mais sans l’en-tête à chaque fois

Pour ma culture, j’aimerai bien privilégier le deuxième choix mais j’ai du mal à rentrer dans ta fonction @Mapi

Merci d’avance pour votre aide !

1 J'aime

Salut @HAnelli,

J’ai fait un modèle pour ce que tu souhaites faire:
https://docs.google.com/spreadsheets/d/17DYyyjqywo5uj95kU9uYLs0lEVuzEOZHij_y0kFUUN8/copy

Que veux-tu dire par « j’ai du mal à rentrer dans ta fonction »?

Merci pour ce retour rapide.
Je voulais étirer la fonction pour récupérer les données de toutes mes entreprises. Puis après ne garder que les données d’intérêt.
Je me suis dit que ça devait être un filtre que tu as implémenté.

En d’autres termes, comme la fonction importjson renvoie une colonne avec les champs et une colonne avec les valeurs, j’ai du mal à voir comment étirer la formule :slight_smile:
https://docs.google.com/spreadsheets/d/1W4ieRQ2CxmMJAFrly0Pd7ox_AhbdD6dMLejYjms96Bg/edit?usp=sharing
onglet GDax2

Tu peux filtrer pour récupérer seulement certains éléments. Comme ceci:

Tu peux regarder la feuille GDAx:
https://docs.google.com/spreadsheets/d/1lnU6ded0JMSFN3p1UBr7IWpv91ifZZ7V_11tyZEFvyI/copy

Si tu ne veux pas l’en-tête, ajoute INDEX(la_formule;;2)

2 J'aimes

Merci beaucoup @Mapi ! ça fonctionne au poil :slight_smile:
Je ne suis pas un féru des fonctions gsheet mais je vais essayer de comprendre !

efficace @Mapi