Import HTML/XML & YahooFinance : difficultés à sortir certaines valeurs

Bonjour à tous !

Je recherche à construire un fichier de suivi de portefeuille d'action pour m'éviter de jongler entre différentes apps.

Tout fonctionne excepté lorsque je souhaite importer via IMPORTHTML la valeur des dividendes d'actions contenant un point (.) dans le ticker (nom de référence de l'action). J'ai essayé via IMPORTXML et je rencontre le même problème.
Par exemple : CS.PA ou SAN.PA vs AAPL.

Chaque valeur se trouve au même niveau sur la page https:// finance . yahoo . com/quote/TICKER (tableau 2, 2eme segment de la ligne 6) ou https:// finance . yahoo . com/quote/TICKER/key-statistics (tableau 4, 2eme segment de la ligne 1).

Je rencontre aussi des difficultés à importer la valeur actuelle de cryptomonnaies via IMPORTXML : certaines ne remontent pas alors que le ticker et le XPath sont bons (exemple avec BNB-EUR qui donne une valeur #N/A).

Ci-joint une copie de mon fichier : https:// docs . google . com/spreadsheets/d/1QddRrj4-w0ZEbIL3PWZi5QJln-qJX6rNttHbMCLyFLM/edit?usp=sharing

Merci pour votre aide !

Bonjour et bienvenue,

Yahoo finance a changé sa manière de présenter les données ... elles sont fournies dans une page avec un "big json" appelé root.App.main.

C'est donc maintenant sur le poste client que sont traitées et affichées les données via javascript et non plus côté serveur. https://webapps.stackexchange.com/questions/115664/how-to-know-if-google-sheets-importdata-importfee...

Il faut donc aussi que ton fichier décrypte ces données, donc parse le json et aille chercher l'info qui t'est pertinente.

https://forum.excel-pratique.com/sheets/aide-sur-l-importhtml-156751#p969887

Bonjour !

Merci pour l'info. Je vais creuser le sujet dans le thread que tu m'as partagé.

N'hésite pas à revenir, c'est complexe, le plus dur est de repérer le paramètre qu'il te faut, ensuite je peux intervenir si tu le souhaites.

Top !

Après avoir regardé ça un peu hier, si je comprends bien il faut créer une macro pour chaque valeur souhaitée. Par exemple:
- DividendRate comme dans l'exemple ci-dessous repris dans l'autre topic

function dividRate(code) {
  var url='https://finance . yahoo . com/quote/' + code
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
  var data = JSON.parse(jsonString)
  var dividendRate = data.context.dispatcher.stores.QuoteSummaryStore.summaryDetail.dividendRate.raw
  return dividendRate
}

- RegularMarketPrice pour les valeurs des crypto par exemple. Est-ce que la formule serait donc la suivante ?

function RegMarketPrice(code) {
  var url='https://finance . yahoo . com/quote/' + code
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
  var data = JSON.parse(jsonString)
  var RegMarketPrice = data.context.dispatcher.stores.QuoteSummaryStore.summaryDetail.regularMarketPrice.raw
  return RegMarketPrice
}

Et suite à ça, je serais en mesure d'utiliser des formules customs "dividRate" et "RegMarketPrice" ?

Merci pour ton aide !
PS : j'ai ajouté des espaces dans les urls du code pour être compliant avec les règles du forum.

Non, tu peux cumuler dans la même macro si les données sont contigües, dans ce cas la fonction sort une matrice que tu copies dans la feuille.

Je vais essayer de te faire un exemple ...

Voici une fonction qui te permet de charger plusieurs valeurs

function dataYahoo(code,items) {
  var url='https://finance.yahoo.com/quote/'+code
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
  var data = JSON.parse(jsonString)
  var list = items.join().split(",")
  var result = []
  list.forEach(function(item){
    try{result.push(data.context.dispatcher.stores.StreamDataStore.quoteData[code][item].raw)}
    catch(e){result.push('not found')}
  })
  return [result]
}

https://docs.google.com/spreadsheets/d/1zZhtvO74kE__k5N2VfbWypnfWt82lSwDkMKk9PL1bg4/copy

Merci ! Je vois tout juste ta réponse en rédigeant la mienne.

En parallèle de ta recherche, jJ'ai trouvé comment faire une seconde macro en complétant tes précieuses informations avec celles de ce lien :
https://www . it-swarm-fr . com/fr/api/yahoo-t-il-soudainement-arrete-aujourdhui-son-api-de-telechargeme...

J'ai du coup créé ce code (qui fonctionne) et qui me permet d'utiliser une "formule" regularMarketPrice indépendamment. Si jamais ça peut servir à quelqu'un d'autre à l'avenir.

function regularMarketPrice(code) {
  var url='https://finance . yahoo . com/quote/' + code
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=root.App.main = ).*(?=}}}})/g) + '}}}}'
  var data = JSON.parse(jsonString)
  var regularMarketPrice = data.context.dispatcher.stores.QuoteSummaryStore.price.regularMarketPrice.raw
  return regularMarketPrice
}

La seule question qu'il me reste est que je vois que tu utilises une case cliquable pour rafraîchir la donnée. Est-ce que cela signifie que la formule ne pas chercher de façon itérative et autonome les valeurs pour mettre à jour la cellule ? Sur ta fonction-macro dataYahoo, tu ajoutes $B$1 sans l'inclure dans ta macro il me semble. Est-ce que c'est faisable aussi avec celle que je te partage ci-dessus ?

Merci

Non, la formule recherche automatiquement la donnée, en fait cette cellule cliquable est pour moi lors de la mise au point. Elle peut quand même servir à rafraîchir les informations de façon régulière par un script (dans ce cas, le script est simplissime, il suffit d'inverser la valeur de la case et la formule se recalcule, avec un déclencheur horaire par exemple). Du coup c'est un peu une habitude pour les fonctions avec urlfetchapp.

Ton lien est intéressant, je n'avais jamais vu cette publication. A noter que chez stackoverflow, la communauté ne connaissait pas, n'avait pas étudié de plus près le code source et répondait systématiquement impossible jusqu'à ce que j'y introduise root.app.main que j'avais découvert dans le code source.

Si tu veux explorer les quelques 15.000 à 22.000 données du json de yahoo, je te donne mon couteau suisse

https://docs.google.com/spreadsheets/d/1EKu4MbuwZ6OTWKvyIJrMfnXf7gXfU8TWU3jwV4XEztU/copy

Merci pour ta bible ! Je la garde au chaud au cas où :)

Hello !

Désolé je relance un ancien sujet mais c'est exactement ce dont j'ai besoin.

Je m'explique : je cherche aussi à récupérer des données de Yahoo Finance : le Market Cap ainsi que le Free Cash Flow (cf images ci-dessous). Mon but est de calcule le P/FCF = Market Cap divisé par le Free Cash Flow.

J'avoue que je suis vraiment débutant en script... je ne sais même pas trop par où commencer, même en lisant vos conseils.. :( pouvez-vous m'aider ?

image image
Rechercher des sujets similaires à "import html xml yahoofinance difficultes sortir certaines valeurs"