Imbriquer 2 formules contenant "ImportXML"

Bonjour !

je dispose de 2 formules, j'aimerai les mettre ensemble pour former qu'un bloc, j'y arrive pas !

Voici la formule que j'ai en B1 sur mon tableau

=INDEX(SPLIT(IMPORTXML(A3,"//@href[contains(.,'wp-json/wp/v2/product')]"),"/",1,1),1,7)

le résultat n'a pas d'important, c'est simplement un ID : 281012 pour l'exemple…

et voici une autre formule

=IMPORTXML(A3,"//*[@id='product-"&B1&"']/div[1]/div[3]/div/div/form/div[3]/span/strong")

j'ai besoins de l'ID pour trouver ce que je veux extraire donc pour le moment je fait une colonne avec mes ID, et l'autre colonne avec ce que je veux..

enfin je récupère le texte contenu grâce aux &[ ]&

j'ai essayé la même chose en insérant ma première formule entre les &[ma première formule]&, j'ai aussi essayé entre parenthèse mais je sais pas comment faire au final..

=IMPORTXML(A3,"//*[@id='product-"&INDEX(SPLIT(IMPORTXML(A3,"//@href[contains(.,'wp-json/wp/v2/product')]"),"/",1,1),1,7)&"']/div[1]/div[3]/div/div/form/div[3]/span/strong")

Une idée ? je sais pas si c'est possible de cette manière, sinon je conserverais mes 2 colonnes

merci !

cela devrait pouvoir fonctionner, mais est-ce que le résultat du premier n'amène pas des caractères en plus (espace, espace insécable) ?

Voici ce que j'ai juste avec la fonction SPLIT

SPLIT(IMPORTXML(A3,"//@href[contains(.,'wp-json/wp/v2/product')]"),"/",1,1)
image

mais est-ce que le résultat du premier n'amène pas des caractères en plus (espace, espace insécable) ?

hum... comment puis-je vérifier ?

compte le nombre de caractères pour voir ...

=IMPORTXML(B4,"//@href[contains(.,'wp-json/wp/v2/product')]")

= resultat :: https://realt.co/wp-json/wp/v2/product/281014

45 caractères !

compte le nombre de caractères pour voir ...

J'ai compris

=SI($G$3,SIERREUR(IMPORTXML(B7,"//*[@id='product-"&(DROITE(IMPORTXML(B7,"//@href[contains(.,'wp-json/wp/v2/product')]"),6))&"']/div[1]/div[3]/div/div/form/div[3]/span/strong"),""),"update")

c'est ok comme ça ! et je pense que le nombre de caractere ( 6 ) restera comme ça quelques temps donc ça me convient

Euh... par contre !

Comment je peut mettre cette formule sous forme de script ? j'ai jamais mis une formule "simple" dans un script en faite

car j'ai pas envie d'avoir des updates de l'import xml a chaque ouverture de ce sheet du coup j'aimerai le passer en action manuel

on peut mettre une formule dans un script comme ceci

range.setFormula(`=ici ma formule `)

mais cela n'arrangera pas to cas car cela met une formule dans une case et après elle vit sa vie !!

donc il faut en fait interroger le site via le script et en tirer la donnée

à suivre ... je suis pris pour le moment !

Pas de soucis :) merci

Dans un script, je le fais souvent de cette façon qui permet de résoudre parfois certaines difficultés selon les sites

var html = UrlFetchApp.fetch(url, { followRedirects: true, muteHttpExceptions: true }).getContentText().replace(/(\r\n|\n|\r|\t|  )/gm, "")

ensuite, on peut extraire de html qui est du texte, soit par split, soit par expression régulière ce que l'on souhaite

En faite je trouve déjà quelques information grâce a ce que tu as mis au dessus…

mais le coup de ménage et la transcription sous forme de tableau c'est une autre histoire pour moi..

https://docs.google.com/spreadsheets/d/1RsELYpCjnr9Qj-zeDGMvFbaq90pDAd_oOylFfku3N-s/edit?usp=sharing

j'ai remis dans ce doc. le tableau dont je me sert avec les importXML et une partie d'un script ( non fonctionnel à 100% mais c'est ce que j'avais commencer )

Qu'est-ce qui ne fonctionne pas ? qu'est-ce que tu veux en tirer ?

Je te mets en mp ce que j'obtiens en console ...

Qu'est-ce qui ne fonctionne pas ?

Je te mets en mp ce que j'obtiens en console ...

Oui en faite j'arrive a trouver les infos en console, mais je ne suis pas capable de retranscrire tout ça sous forme de tableau propre.

qu'est-ce que tu veux en tirer ?

Simplement quelque chose d'identique à ce que j'ai fait avec les fonction importXML de ma première feuille

Sauf si je peux faire autrement pour ne pas avoir d'appel à chaque ouverture du Sheet... ( je ne me suis pas encore posé réellement sur le problème )

Un début

repris plus loin

mais cette méthode indépendante entre chaque donnée amène des décalages et stock ne fonctionne pas car il n'y a pas de

class="property-stock"

Il va plutôt falloir se baser sur les balises li et notamment celles contenant product type-product pour d'abord découper en tranche et y puiser les infos.

Je reprendrai plus tard ...

voici

complété ci-après

le split est plus facile à utiliser que les regex

Oh merci ! il faut que je regarde comment ça fonctionne maintenant

Car sur mon tableau initiale ( avec importXML ) je vais chercher une information qui n'est pas présente sur "/place-de-marche" mais directement sur les liens des maisons avec cette formule :

=INDEX(SPLIT(IMPORTXML(B4,"//@href[contains(.,'wp-json/wp/v2/product')]"),"/",1,1),1,7)

Voici ce que j'ai en B4 pour bien comprendre https://realt.co/product/1630-e-state-fair-ave-detroit-mi-48203/

et pour l'affichage du stock c'est pareil. je passe directement par le lien en B4

=SI($F$3,SIERREUR(IMPORTXML(B4,"//*[@id='product-"&(DROITE(IMPORTXML(B4,"//@href[contains(.,'wp-json/wp/v2/product')]"),6))&"']/div[1]/div[3]/div/div/form/div[3]/span/strong"),""),"update")

ok, donc il faut refaire 2 appels par item de plus, je vais regarder ...

un exercice (pour mémoire)

function test() {
  var url = 'https://realt.co/fr/place-de-marche/'
  var classeur = SpreadsheetApp.getActiveSpreadsheet();
  var feuille = classeur.getSheetByName('brut de forge');
  feuille.clearContents();
  var fetchedUrl = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
  if (fetchedUrl) {
    var html = fetchedUrl.getContentText().replace(/(\r\n|\n|\r|\t|  )/gm, "")
    if (html.length) {
      var sections = html.split('type-product')
      sections.forEach((s,i) => {
        if (i>0) {
          var result = ExtractAllRegex(s.split('</div></li>')[0],">([^<]+)<",1)
          feuille.getRange(i, 1, 1, result.length).setValues([result])
        }
      })
    }
  }
}
function ExtractAllRegex(input, pattern,groupId) {
  return Array.from(input.matchAll(new RegExp(pattern,'g')), x=>x[groupId]);
}

ok, donc il faut refaire 2 appels par item de plus, je vais regarder ...

Ca marche merci :)

un exercice (pour mémoire)

le résultat est intéressant en tout cas !

Rechercher des sujets similaires à "imbriquer formules contenant importxml"