[ImportXML] Xpath vers le prix affiché sur un site
Bonjour,
J'aimerais savoir s'il est possible d'importer sur google sheet le prix d'un objet affiché sur "Banggood" ?
Je cherche une solution depuis déjà quelques heures et après plusieurs essais de Xpath biens différents j'ai enfin réussi à trouver quelque chose qui semble s'approcher le plus du résultat que j'en attend
J'utilise l'extension "import from web" car j'ai l'impression d'arriver plus facilement à un résultat mais je n'y connais sincèrement presque rien..
Voici un screenshoot;
Merci d'avance pour m'avoir lu
Bonjour,
Peux-tu donner l'url utilisée ?
Un XPath ne peut pas être seulement .main-price
!! cela pourrait être par exemple //div[@class='main-price']
...voir ici https://forum.excel-pratique.com/astuces/google-sheets-importxml-et-xpath-150789
Merci pour la réponse
Yep j'ai bien vu qu'un Xpath doit normalement être composé d'une suite comme pour un menu déroulant d'un explorateur de fichier mais après plusieurs essais je n'ai toujours pas compris comment atteindre cette info. J'ai d'abord essayé de simplement copier et coller le xpath depuis l'inspection d'élément mais voila ce que j'obtiens à partir de ça
Importfromweb("Lien";"/html/body/div[3]/div/div[2]/div[2]/div[7]/span[2]" = "#ALL_SELECTORS_RETURN_NULL" )
Ensuite j'ai essayé d'écrire le chemin moi même mais plus d'infos à partir du deuxième div[2] j'ai alors testé pas mal de combinaisons et regardé pas mal de vidéos sans réussir à comprendre le fonctionnement, donc pour l'instant je suis bien d'accord avec vous je sèche sur comment écrire correctement un Xpath
Je ne peux malheureusement pas envoyer de lien ici ... J'imagine que n'importe quel article fait l'affaire mais c'est le EV800D sur banggood.com
Merci pour le document je viens de le lire et j'en ai déjà lu quelque uns dans le même style mais visiblement il me manque une connaissance de base pour le comprendre correctement, je continue a me renseigner sur le sujet pour essayer de comprendre :/...
Je ne peux malheureusement pas envoyer de lien ici ... J'imagine que n'importe quel article fait l'affaire mais c'est le EV800D sur banggood.com
Oui c'est vrai, mais tu peux mettre un lien vers une copie de ton fichier.
Néanmoins, les fonctions natives de GSheets seront inopérantes car en fait le site est construit côté "client" et non côté "serveur" par javascript. Il faut donc aller décoder le code source (si tant est qu'il ne soit pas lui-même bloqué) par un script pour aller chercher le prix dans cette variable, par exemple pour https://www.banggood.com/fr/800W-Multifunctional-Electric-Health-Kettle-1_6L-Tea-Soup-Stainless-Stee...
window.ad_product = {
"id": "1753341", //"vendor": "",
"price": "29.99",
"url": "https://www.banggood.com/fr/800W-Multifunctional-Electric-Health-Kettle-1_6L-Tea-Soup-Stainless-Steel-Household-Decoction-Pot-p-1753341.html",
"picture": "https://imgaz1.staticbg.com/thumb/view/oaupload/banggood/images/EB/85/1142aa8d-4d1d-4651-b212-71677a02f315.jpg",
"name": "Bouilloire électrique multifonctionnelle de santé 800W 1.6L pot de décoction de ménage d'acier inoxydable de soupe de thé",
"category": "",
};
On peut s'appuyer plutôt sur snapchatData
En A1, mets l'url
Ensuite
=prix(A1)
avec comme fonction personnalisée
function prix(url) {
var source = UrlFetchApp.fetch(url).getContentText()
var snapchatData = JSON.parse(source.split('var snapchatData = ')[1].split(';')[0])
return (snapchatData.detail.price + ' ' + snapchatData.detail.currency)
}
Ca fonctionne oui ! Merci beaucoup pour l'aide !
J'ai par contre deux autres soucis avec cette solution :/ . Mais je ne suis pas sur que ce soit réglable ou même si tu as l'envie de te pencher dessus
Dans le doute je demande quand même :p..
J'essaie de comprendre la fonction pour pouvoir en faire autant qu'il y a d'entrepôt à sélectionner sur la page mais je coince déja...
J'essaie cette fois ci d'utiliser fb_track
var fb_track='track',fb_jsonNewFB={"content_type":"product","size":[],"color":[],"material":[],"pattern":[],"brand":[],"ecomm_site":"pc","content_category":"Home Appliances > Kitchen Appliances > Electric Kettle","content_ids":["1753341-287845US-ESW"],"content_name":"Bouilloire \u00e9lectrique multifonctionnelle de sant\u00e9 800W 1.6L pot de d\u00e9coction de m\u00e9nage d'acier inoxydable de soupe de th\u00e9","value":"29.99","currency":"USD","page_lang":"fr-FR","first_source":"google","campaign":"-","medium":"organic","eventID":"d9b4183709cb289809cd1223f5187ccd6b4885663644a1d4cd80707bb69e1d6b"},fb_event_name='ViewContent';
mais je ne sais pas si c'est bien ce que je dois choisir ... D'ailleurs ça m'arrangerait si le prix était directement en € mais ça m'a l'air tout de suite bien plus compliqué...
J'essaie donc de faire une fonction personnalisé en faisant mon meilleur copié collé de celle que tu m'as envoyé plus tôt mais j'ai probablement raté quelques étapes car ça m'affiche "erreur"
Voila ce que j'ai:
function prixes(url) {
var source = UrlFetchApp.fetch(url).getContentText()
var fb_track = JSON.parse(source.split('var fb_track = ')[1].split(';')[0])
return (fb_track.value + ' ' + fb_track.value.currency)
}
Et le deuxième soucis bien moins important mais assez embêtant est que le prix s'affiche sous une forme que sheets ne prend pas en compte comme un nombre à cause du point "10.00 USD". Est il possible de changer les paramètres concernant la virgule ou alors forcer le point à devenir une virgule
Merci beaucoup pour l'aide !
Bonjour,
Pour le point est l’euro
function prix(url) {
var source = UrlFetchApp.fetch(url).getContentText()
var snapchatData = JSON.parse(source.split('var snapchatData = ')[1].split(';')[0])
return ((Number((snapchatData.detail.price).replace(/./ig, ",")) * 0.86442) + ' €')
}
Bonne Journée
J'essaie cette fois ci d'utiliser fb_track
var fb_track='track',fb_jsonNewFB={"content_type":"product","size":[],"color":[],"material":[],"pattern":[],"brand":[],"ecomm_site":"pc","content_category":"Home Appliances > Kitchen Appliances > Electric Kettle","content_ids":["1753341-287845US-ESW"],"content_name":"Bouilloire \u00e9lectrique multifonctionnelle de sant\u00e9 800W 1.6L pot de d\u00e9coction de m\u00e9nage d'acier inoxydable de soupe de th\u00e9","value":"29.99","currency":"USD","page_lang":"fr-FR","first_source":"google","campaign":"-","medium":"organic","eventID":"d9b4183709cb289809cd1223f5187ccd6b4885663644a1d4cd80707bb69e1d6b"},fb_event_name='ViewContent';
mais je ne sais pas si c'est bien ce que je dois choisir ... D'ailleurs ça m'arrangerait si le prix était directement en € mais ça m'a l'air tout de suite bien plus compliqué...
Dans cet extrait du code source, je ne vois pas non plus de valeurs en euros.
Si tu veux en effet utiliser cette partie de code source, il faut voir qu'il y a 3 variables
fb_track
fb_jsonNewFB
fb_event_name
et que la seule qui sois sous forme de json est
fb_jsonNewFB={"content_type":"product","size":[],"color":[],"material":[],"pattern":[],"brand":[],"ecomm_site":"pc","content_category":"Home Appliances > Kitchen Appliances > Electric Kettle","content_ids":["1753341-287845US-ESW"],"content_name":"Bouilloire \u00e9lectrique multifonctionnelle de sant\u00e9 800W 1.6L pot de d\u00e9coction de m\u00e9nage d'acier inoxydable de soupe de th\u00e9","value":"29.99","currency":"USD","page_lang":"fr-FR","first_source":"google","campaign":"-","medium":"organic","eventID":"d9b4183709cb289809cd1223f5187ccd6b4885663644a1d4cd80707bb69e1d6b"}
ce qui peut te donner ...
function prix(url) {
var source = UrlFetchApp.fetch(url).getContentText()
// il faut être très vigilent que le json soit parfaitement cohérent
var jsonString = source.split('fb_jsonNewFB=')[1].split('}')[0] + '}'
var json = JSON.parse(jsonString)
return ([ json.content_name , json.value.replace(".", ",") , json.currency ])
}
Merci pour la réponse ImoKa, je n'ai malheureusement pas réussi à faire fonctionner la fonction mais finalement elle m'a fait découvrir la fonction "replaceb" qui a soulevé un autre problème étant le "USD" à la fin ... En l'enlevant de la fonction personnalisée le nombre se change automatiquement avec une virgule
Merci beaucoup pour ton aide Mikhail ! J'essaie de comprendre tout ça demain !
Alors malheureusement je n'ai pas réussi à comprendre
Merci beaucoup pour votre aide !
Oui, il faut bien comprendre la structure d'un json ... c'est la clé
https://developer.mozilla.org/fr/docs/Learn/JavaScript/Objects/JSON