0
(0)

Dans un premier article Exploiter des données d'Internet avec la fonction SERVICEWEB 1, j'ai présenté 4 premiers exemples de service web.

Ceux-ci portaient sur :

  • Récupération d'informations de géolocalisation,
  • Récupération d'informations sur une adresse IP (WHOIS),
  • Récupération d'informations sur une adresse postal,
  • Affichage de citations de Kanye West (😁).

Je vous présente 4 nouveaux services web.

Service 5 : Génération de graphique en tant qu'image intégrée

Objectif : Avoir des graphiques intégrés aux cellules et donc copiables comme les graphiques Sparklines d'Excel (comme une formule).

Site : https://quickchart.io/

Exemple 1

=IMAGE("https://quickchart.io/chart?c={type:'radialGauge',data:{datasets:[{data:["&B2&"],backgroundColor:'green'}]},options:{centerArea:{fontSize:90}}}")

Excel Service web 5 Exemple 1

Exemple 2

=IMAGE("https://quickchart.io/chart?c="&F2;1)

F2 : ="{type:'gauge',data:{datasets:[{value:"&B2&",data:[20,40,60],backgroundColor:['green','orange','red']}]},options:{valueLabel:{fontSize:22,backgroundColor:'transparent',color:'#000',formatter:function(value,context){return value;},}}}"

Excel Service web 5 Exemple 2

Remarques :

  • Je ne suis pas parvenu à faire prendre en compte les options de la rubrique "plugins" (masquage légende...). Je n'ai pas trouvé si l'inscription gratuite ou payante était nécessaire pour leurs prises en charge.
  • Il y a beaucoup d'autre graphiques et options disponibles.

Service 6 : Données sur une entreprise

Objectifs : Informations sur les entreprises.

Site : https://api.gouv.fr/documentation/api-recherche-entreprises

=LET(rs;"Laboratoires Urgo";dep;21;SERVICEWEB("https://recherche-entreprises.api.gouv.fr/search?q="&URLENCODAGE(rs)&"&departement="&dep))

Extraction des données

Convertir le retour JSON via PowerQuery (voir exemple Fonction-serviceweb1/#service-3-informations-sur-une-adresse-postale).

Excel ServiceWeb Informations sur les sociétés

Il serait possible de continuer à développer les rubriques siege et dirigeant.

Service 7 : Lister les jours fériés

Objectif : Liste de jours fériés en fonction du pays.

Site : https://date.nager.at

=LET(Pays;"US";SERVICEWEB("https://date.nager.at/api/v3/PublicHolidays/2023/"&Pays)

Extraction des données

Avec PowerQuery

Convertir la chaine retour JSON via PowerQuery (voir exemple Fonction-serviceweb1/#service-3-informations-sur-une-adresse-postale).

Avec des fonctions Excel

Définition de la fonction Filtre.JSON (V2)
=LAMBDA(Chaine;NbcarPrefixe;NbcarSuffixe;
  LET(Lch;NBCAR(Chaine);
    chN;STXT(Chaine;NbcarPrefixe+2;Lch-NbcarSuffixe-NbcarPrefixe-2);
    LchN;Lch-NbcarPrefixe-NbcarSuffixe;
    s;SEQUENCE(LchN);
    chM;CONCAT(MAP(s;LAMBDA(Vs;LET(
        chG; STXT(chN;1;Vs);
        tHTb;NBCAR(SUBSTITUE(chG;"]";""))=NBCAR(SUBSTITUE(chG;"[";""));
        tHOb;(NBCAR(SUBSTITUE(chG;"}";""))-1)<=NBCAR(SUBSTITUE(chG;"{";""));
        c;STXT(chN;Vs;1);
        ccc;SI(ET(Vs>1;Vs<LchN-1);STXT(chN;Vs-1;3);"");
        SI(ET(tHTb;tHOb;ccc="},{");CAR(30);
             SI(ET(tHTb;tHOb;OU(ccc=""",""";ccc=""":""";DROITE(ccc;2)=",""";GAUCHE(ccc;2)=""":"));
                  CAR(31);
                  c))))));
    matFc;MAKEARRAY(1;3;LAMBDA(l;c;INDEX({"""";"";""""};c)&CAR(31)&INDEX({"""";"""";""};c)));
    matFl;MAKEARRAY(1;2;LAMBDA(l;c;INDEX({"}";"""}"};c)&CAR(30)&"{"""));
    FRACTIONNER.TEXTE(STXT(chM;3;LchN-SI(STXT(chM;LchN-3;1)="""";6;5));matFc;matFl)))(B2;0;0)

Fonction permettant de convertir une chaîne de texte en format JSON en plusieurs colonnes (clé/valeur) et plusieurs lignes (une ligne par objet).
La chaîne de départ doit être entre crochet ([...]).
Pour ignorer des caractères en début et en fin de chaîne, utilisez les arguments NbcarPrefixe et NbcarSuffixe.
Les objets imbriqués ({...}) et tableaux imbriqués ([...]) ne sont pas interprétés.

Arguments :

  • Chaîne : La chaîne à convertir.
  • NbcarPrefixe : Nombre de caractères à ignorer en début de chaîne.
  • NbcarSuffixe : Nombre de caractères à ignorer en fin de chaîne.
Pour les curieux, quelques informations sur son fonctionnement (cliquer pour développer)

> On fractionne la chaîne en ligne à chaque changement d'objet en se basant sur la présence des accolades fermante puis ouvrante si elles ne sont pas dans un objet ({...}) ou une liste ([...]) avec la fonction FRACTIONNER.TEXTE.
> Chaque objet est fractionné en colonne en se basant sur le caractère deux points ( : séparateur clé/valeur de l'élément) et le caractère virgule ( , séparateur des éléments) s'ils ne sont pas dans un objet ({...}) ou une liste ([...]).
> On "marque" les fractionnements des lignes en remplaçant les virgules correspondantes par le caractère ASCII 30 (séparateur d'enregistrement) et celui des colonnes en remplaçant les deux points correspondants par le caractère ASCII 31 (séparateur d'unité).
> Pour cela on va "parcourir" chaque caractère de la chaîne avec une fonction MAP pour réaliser ces remplacements.
>En se basant sur la comparaison du nombre de crochets/accolades ouvrant (marquant un début de table/objet) et fermants (marquant une fin de table/objet) se trouvant avant le caractère évalué (chaîne à gauche), on déterminera si l'on est dans une table ou un objet imbriqué.

Excel_ServiceWeb7
  • Lch : Longueur de la chaîne, utilisé seulement pour générer chN.
  • chN : Chaîne Nettoyée (suppression des caractères préfixes et suffixes).
  • LchN : Longueur de la chaîne Nettoyée (chN).
  • Pour gérer les tables/objets imbriqués :
    • s : séquence de valeur de 1 à Lch servant à parcourir chaque caractère de chN.
    • chM : Chaîne chN Modifiée où les virgules et deux points ont été remplacés sauf dans les tables et objets imbriqués.
      Via la fonction MAP on parcourt chN : soit le caractère d'origine est renvoyé soit c'est le caractère ASCII 30 ou 31, le tout assemblé avec une fonction CONCAT.
      • Vs : Une des valeurs de s (séquence).
      • chG : Chaîne à Gauche du caractère évalué.
      • tHTb : Booléen à VRAI si le caractère évalué est Hors Tableau (décompte des caractères différents de crochet dans chG).
      • tHOb : Booléen à VRAI si le caractère évalué est Hors Objet (décompte des caractères différents d'accolade dans chG, plus complexe du à la présence de la première accolade ouvrante en début de chaîne).
      • c : Le caractère évalué.
      • ccc : Chaîne constituée du caractère précèdent le caractère évalué, du caractère évalué et du caractère suivant (gestion des effets de bord du au premier et dernier caractère évalué).

        Les 2 fonctions SI permettent le choix entre conserver le caractère évalué ou prendre le caractère ASCII 30 ou 31.
    • matFc : matrice des 3 cas de Fractionnement en colonnes.
    • matFl : matrice des 2 cas de Fractionnement en lignes.
      matFc et matFl permettent de supprimer les guillemets, accolades et crochets lors du fractionnement.
    • La fonction FRACTIONNER.TEXTE pour réaliser le fractionnement en gérant le cas particulier si la dernière valeur est en format chaîne de texte (un guillemet présent à la fin devra être supprimé).

Une nouvelle version de cette fonction est présentée dans cet article : Ma fonction Filtre.JSON

Sélection des colonnes2 et 4

Chaine JSON en B2.

=CHOISIRCOLS(Filtre.JSON(B2;1;1);2;4)

Excel_ServiceWeb6

Service 8 : Blagues avec Chuck Norris

Objectifs : Pour le plaisir.

Site : https://api.chucknorris.io/jokes/random

=SERVICEWEB("https://api.chucknorris.io/jokes/random")

Extraction des données

Chaine JSON en B2.

=CHOISIRCOLS(Filtre.JSON(B2;1;2);14)

ou

=INDEX(FRACTIONNER.TEXTE(B2;{"value"":""";"""}"});;2)

On obtient par exemple :

"You can do what you want in international waters… that's why Chuck Norris filled his Jacuzzi with international water"

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 0 / 5. Nombre de votes : 0

Aucun vote pour l'instant ! Soyez le premier à noter ce post.

Nous sommes désolés que cet article ne vous ait pas été utile !

Améliorons cet article !

Dites nous comment nous pouvons améliorer cet article ?

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *