Importer des données web

Bonjour,

Je souhaites importer un tableau du site web "octane.gg" plus précisément celui là "/players/3d9c-violentpanda/stats/events" sur une feuille google sheets. J'ai d'abord essayé avec importhtml et importxml mais le résultat est tout le temps le même à savoir "Le contenu est vide" ...

Après quelques recherches je suis tombé sur Importfromweb, j'ai tout fait correctement et j'ai ressayé mais encore une fois le résultat est #PAGE_IS_EMPTY ... Je ne comprends pas j'ai bien pris le Xpath du tableau et tout fait correctement mais impossible d'extraire ces données, est ce que quelqu'un aurait une solution ?

Bonjour,

tu ne pourras pas utiliser les fonctions natives de google sheets car la page est construite en local via javascript

heureusement, la source contient un json

<script id="__NEXT_DATA__" type="application/json">

qu'il faut parser pour en tirer les informations (si les mentions légales du site ne l'interdisent pas d'un point de vue légal, mais je n'ai rien trouvé la-dessus)

je jetterai un oeil demain sur le json pour le décoder correctement

image

il faudrait donner les infos que tu souhaites retrouver

il y en un paquet ! par exemple

_id    5f3d8fdd95f40596eae23d9c
slug    3d9c-violentpanda
tag    ViolentPanda
country    nl
events[0-0]    tableau
_id    5f35882d53fbbb5894b4306c
slug    306c-eleague-2017
name    ELEAGUE 2017
region    INT
mode    3
tier    S
image    https://griffon.octane.gg/events/eleague.png
teams[0-0]    tableau
_id    6020bc70f1e4807cc700239f
slug    239f-gale-force
name    Gale Force
image    https://griffon.octane.gg/teams/gale-force.png
opponents[0-3]    tableau
_id    6020bc70f1e4807cc70023a5
slug    23a5-g2-esports
name    G2 Esports
image    https://griffon.octane.gg/teams/g2-esports.png
_id    6020bc70f1e4807cc70023ce
slug    23ce-chiefs-esports
name    Chiefs Esports
image    https://griffon.octane.gg/teams/chiefs-esports.png
_id    6020bc70f1e4807cc700239d
slug    239d-cloud9
name    Cloud9
image    https://griffon.octane.gg/teams/cloud9.png
_id    6020bc70f1e4807cc70023fd
slug    23fd-ghost-gaming
name    Ghost Gaming
image    https://griffon.octane.gg/teams/ghost-gaming.png
startDate    2017-12-01T00:00:00Z
endDate    2017-12-03T16:00:00Z
total    22
replays    0
wins    16
seconds    7259
replaySeconds    0
total    5
replays    0
wins    4
assists    18
goalParticipation    59,64912281
goals    16
rating    22,83496291
saves    26
score    6040
shootingPercentage    21,33333333
shots    75

Merci pour ta réponse Je viens de voir que le mec qui a développé l'extension importfromweb en a aussi fait une qui s'appelle importjson, est ce que c'est l'outil que je dois utiliser ?

Sinon pour les données que je recherche on peut réduire le tableau avec les filtres "S-Tier" et "A-Tier" directement sur la page ce qui faciliterait les choses je pense. Ce que je recherche en gros c'est d'avoir quasiment le même tableau que sur la page, mais vu ton message précédent ça a l'air d'être des données matchs par matchs donc ultra long... Je sais pas si c'est possible du coup

Merci pour ta réponse Je viens de voir que le mec qui a développé l'extension importfromweb en a aussi fait une qui s'appelle importjson, est ce que c'est l'outil que je dois utiliser ?

je déconseille personnellement d'utiliser importjson que l'on trouve sur github, c'est une véritable usine à gaz et dans ton cas je ne suis pas sûr que tu y parviennes facilement eu égard à la complexité du json qui est contenu dans la source de la page web !

une partie des données

image
function octane() {
  var url = 'https://octane.gg/players/3d9c-violentpanda/stats/events'
  var from = 'type="application/json">'
  var to = '</script>'
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.split(from)[1].split(to)[0]
  var data = JSON.parse(jsonString)
  var output = [
    [
      'events[0].name',
      'games.total',
      'games.replays',
      'games.wins',
      'games.seconds',
      'games.replaySeconds',
      'matches.total',
      'matches.replays',
      'matches.wins',
      'stats.assists',
      'stats.goalParticipation',
      'stats.goals',
      'stats.rating',
      'stats.saves',
      'stats.score',
      'stats.shootingPercentage',
      'stats.shots'
    ]
  ]
  data.props.pageProps.stats.forEach(function (stat) {
    output.push([
      stat.events[0].name,
      stat.games.total,
      stat.games.replays,
      stat.games.wins,
      stat.games.seconds,
      stat.games.replaySeconds,
      stat.matches.total,
      stat.matches.replays,
      stat.matches.wins,
      stat.stats.assists,
      stat.stats.goalParticipation,
      stat.stats.goals,
      stat.stats.rating,
      stat.stats.saves,
      stat.stats.score,
      stat.stats.shootingPercentage,
      stat.stats.shots
    ])
  })
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('octane').clearContents()
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('octane').getRange(1,1,output.length,output[0].length).setValues(output)
}

Merci Je n'ai jamais utilisé de script, pour le mettre je vais dans extension/app script et je colle ? Parce que je viens de le faire et il me met erreur à la ligne 50

Et si par exemple je veux récupérer les données d'un autre joueur sur le site est ce que je dois obligatoirement faire un nouveau script en changeant le var url ou je peux faire en sorte qu'il me donne les données du lien qui se trouve dans une case.

En tout cas merci pour ton aide

Peux-tu partager le fichier, ce serait plus simple ... pour partager https://www.sheets-pratique.com/fr/cours/partage

On peut mettre aussi le joueur en variable

image

avec une fonction personnalisée

mets le joueur en A1 et la formule en A2

function octane(joueur) {
  var url = 'https://octane.gg/players/'+joueur+'/stats/events'
  var from = 'type="application/json">'
  var to = '</script>'
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.split(from)[1].split(to)[0]
  var data = JSON.parse(jsonString)
  var output = [
    [
      'events[0].name',
      'games.total',
      'games.replays',
      'games.wins',
      'games.seconds',
      'games.replaySeconds',
      'matches.total',
      'matches.replays',
      'matches.wins',
      'stats.assists',
      'stats.goalParticipation',
      'stats.goals',
      'stats.rating',
      'stats.saves',
      'stats.score',
      'stats.shootingPercentage',
      'stats.shots'
    ]
  ]
  data.props.pageProps.stats.forEach(function (stat) {
    output.push([
      stat.events[0].name,
      stat.games.total,
      stat.games.replays,
      stat.games.wins,
      stat.games.seconds,
      stat.games.replaySeconds,
      stat.matches.total,
      stat.matches.replays,
      stat.matches.wins,
      stat.stats.assists,
      stat.stats.goalParticipation,
      stat.stats.goals,
      stat.stats.rating,
      stat.stats.saves,
      stat.stats.score,
      stat.stats.shootingPercentage,
      stat.stats.shots
    ])
  })
  return output
}

Oh niquel ! Je viens un peu de regarder ton script merci beaucoup c'est exactement ce que je cherchais au début !

Rechercher des sujets similaires à "importer donnees web"