web-dev-qa-db-ja.com

Steamからの情報で自動更新Googleスプレッドシートを作成する方法は?

Steamで最近プレイしたものに関する情報を含む自動更新Googleスプレッドシートを作成するにはどうすればよいですか?

テーブルは次のようになります。 enter image description here

A2はここからアカウント名に関する情報を取得します: http://steamcommunity.com/id/PerfectPlays このコード:=IMPORTXML("http://steamcommunity.com/id/PerfectPlays", "//span[@class='actual_persona_name']")

B2は、ここから再生される最近の情報に関する情報を取得する必要があります: http://steamcommunity.com/id/PerfectPlays/games/?tab=recent ただし、Dotaのみ2ゲーム。誰かがB2のコードを手伝ってくれますか?

1
user95432

?tab=recentを含むページのテーブルはスクリプトによって動的に形成されるため、これは 他の質問 XPathを使用したImportXMLについてより複雑です。 ImportXMLがアクセスするページソースにテーブルが存在しません。

ソースを調べると、スクリプトに埋め込まれたデータを確認できます。

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

だから、それを取得するには:

  1. XPath //scriptでページ上のすべてのスクリプトを取得します((//script)[12]で必要な12番目だけを取得することも可能ですが、他のスクリプトを追加または削除するとインポートが中断します)。

  2. REGEXEXTRACT で時間数を抽出します。 Google Spreadsheetsが使用する regex library はかなり制限されているため、これには2つのコマンドが必要でした。先読みも後読みもサポートしていません。

  3. 必要な番号にテキストを追加します。

一行で、これは

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

読みやすくするために、ここでは折れ線でインデントされたバージョンを示します。

=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