web-dev-qa-db-fra.com

Comment créer une feuille de calcul Google avec mise à jour automatique avec les informations de Steam?

Comment créer une feuille de calcul Google à mise à jour automatique contenant des informations sur la lecture récente dans Steam?

Le tableau doit ressembler à ici: enter image description here

A2 prend des informations sur le nom du compte à partir d’ici: http://steamcommunity.com/id/PerfectPlays avec le code suivant: =IMPORTXML("http://steamcommunity.com/id/PerfectPlays", "//span[@class='actual_persona_name']")

B2 doit prendre des informations sur les dernières parties jouées à partir d’ici: http://steamcommunity.com/id/PerfectPlays/games/?tab=recent Mais uniquement à partir du jeu Dota 2. Quelqu'un peut aider avec le code pour B2?

1
user95432

Ceci est plus compliqué de votre autre question à propos de ImportXML avec XPath, car le tableau de la page avec ?tab=recent est formé dynamiquement par un script. Le tableau n'existe pas dans le source de page auquel ImportXML a accès.

En inspectant la source, on peut voir les données incorporées dans un script:

<script language="javascript">
...  "name":"Dota 2","last_played":1433455140,"hours":"97.3", ....

Alors, pour l'obtenir:

  1. Obtenez tous les scripts sur la page avec XPath //script (il est également possible d’obtenir uniquement le 12 dont nous avons besoin avec (//script)[12], mais l’importation s’interrompt s’ils ajoutent ou suppriment un autre script).

  2. Extrayez le nombre d'heures avec REGEXEXTRACT . Cela m'a pris deux commandes car la bibliothèque de regex utilisée par Google Spreadsheets est assez limitée; il ne prend en charge ni les anticipés ni les observateurs.

  3. Ajoutez n'importe quel texte au nombre que vous voulez.

En une seule ligne, cela se fait par

=REGEXEXTRACT(REGEXEXTRACT(CONCATENATE(IMPORTXML("http://steamcommunity.com/id/PerfectPlays/games/?tab=recent", "//script")),"Dota\s+2[^{]*\d*\.\d+"),"[0-9.]*$")&" hrs last two weeks"

Pour des raisons de lisibilité, voici la version linebroken et indented.

=REGEXEXTRACT(
  REGEXEXTRACT(
    CONCATENATE(
     IMPORTXML("http://steamcommunity.com/id/PerfectPlays/games/?tab=recent", "//script")
    ),
    "Dota\s+2[^{]*\d*\.\d+"
  ),
  "[0-9.]*$"
) & " hrs last two weeks"
3
user79865