【问题标题】:IMPORTDATA not grabbing live data from XMLIMPORTDATA 未从 XML 中获取实时数据
【发布时间】:2023-04-02 21:23:01
【问题描述】:

我正在使用 Google 表格的 IMPORTDATA 函数从一个从 API 提取的 XML 文件中获取信息,但我提取到表格中的信息不是最新的。

如何修改工作表以获取最新数据?

比较表格:https://docs.google.com/spreadsheets/d/1W0Bt5z-Tky-tNhG_JtfE4FfjTRgQNRu_eQu2qVhQ-_E/edit?usp=sharing(LiveScores 表格)

到 XML:https://www67.myfantasyleague.com/2019/export?TYPE=liveScoring&L=64741&APIKEY=&W=14&DETAILS=1&JSON=0

在两组数据中观察特许经营id="0015"

表格声明<franchise id="0005" score="0.00" gameSecondsRemaining="21600" playersYetToPlay="6" playersCurrentlyPlaying="0" isHome="0">

XML 状态 <franchise id="0015" score="11.14" gameSecondsRemaining="20004" playersYetToPlay="4" playersCurrentlyPlaying="2">(此数据是针对当前正在播放的足球比赛,因为我正在编写此内容,因此上述示例可能不准确,但它不会是例如 0.00 的分数。

任何帮助都会很棒,谢谢!

【问题讨论】:

    标签: web-scraping google-sheets google-sheets-formula array-formulas google-sheets-importxml


    【解决方案1】:

    您是否尝试过使用 IMPORTXML? Google Sheets IMPORTXML Page

    在 IMPORTXML 中,您可以使用 Inspect Element 功能来拉取 xpath。

    希望这会有所帮助。如果我能提供进一步帮助,请告诉我。

    编辑:数据导入时更改说明

    1. 在工具栏中转到脚本编辑器
    2. 现在在脚本中,粘贴下面列出的代码

    /**
     * Go through all sheets in a spreadsheet, identify and remove all spreadsheet
     * import functions, then replace them a while later. This causes a "refresh"
     * of the "import" functions. For periodic refresh of these formulas, set this
     * function up as a time-based trigger.
     *
     * Caution: Formula changes made to the spreadsheet by other scripts or users
     * during the refresh period COULD BE OVERWRITTEN.
     *
     * From: https://stackoverflow.com/a/33875957/1677912
     */
    function RefreshImports() {
      var lock = LockService.getScriptLock();
      if (!lock.tryLock(5000)) return;             // Wait up to 5s for previous refresh to end.
      // At this point, we are holding the lock.
    
      var id = "YOUR-SHEET-ID";
      var ss = SpreadsheetApp.openById(id);
      var sheets = ss.getSheets();
    
      for (var sheetNum=0; sheetNum<sheets.length; sheetNum++) {
        var sheet = sheets[sheetNum];
        var dataRange = sheet.getDataRange();
        var formulas = dataRange.getFormulas();
        var tempFormulas = [];
        for (var row=0; row<formulas.length; row++) {
          for (col=0; col<formulas[0].length; col++) {
            // Blank all formulas containing any "import" function
            // See https://regex101.com/r/bE7fJ6/2
            var re = /.*[^a-z0-9]import(?:xml|data|feed|html|range)\(.*/gi;
            if (formulas[row][col].search(re) !== -1 ) {
              tempFormulas.push({row:row+1,
                                 col:col+1,
                                 formula:formulas[row][col]});
              sheet.getRange(row+1, col+1).setFormula("");
            }
          }
        }
    
        // After a pause, replace the import functions
        Utilities.sleep(5000);
        for (var i=0; i<tempFormulas.length; i++) {
          var cell = tempFormulas[i];
          sheet.getRange( cell.row, cell.col ).setFormula(cell.formula)
        }
    
        // Done refresh; release the lock.
        lock.releaseLock();
      }
    }

    这个sn-p的代码来自Periodically refresh IMPORTXML() spreadsheet function

    1. 最后也是最不重要的,替换“YOUR-SHEET-ID”

    注意:我没有亲自测试过这段代码,我不能保证它。我建议先制作一个副本并在那里进行测试。

    希望这可以解决您的数据未按您希望的频率导入的问题。如果您想手动获取“新鲜”数据,您可以删除/剪切导入功能并将其粘贴回来。

    【讨论】:

    • 感谢您的报价!我很想得到你的帮助!你知道 IMPORTXML 是否会给我“更新鲜”的数据吗?在深入研究更改我的导入功能之前,我想弄清楚为什么 google 表格没有获取最新数据。
    • 您好!除非使用 Google Apps 脚本,否则无法更改导入“新鲜”数据的速率。我现在正在使用更改刷新率的说明和代码编辑我的答案
    • @Amod 我回来了,当我在玩自己的电子表格时,我注意到文件>电子表格设置>计算下的一个设置称为重新计算。我不知道这是否适用于您的用例,但您可以更改公式以在电子表格或每分钟发生更改时重新计算。我不知道我是否有那么大的意义,但它可能值得一看。
    【解决方案2】:

    试试A2

    =ARRAYFORMULA(IFNA(VLOOKUP(C2:C, PlayerList!A:F, {2, 6}, 0)))
    

    C2中:

    =ARRAYFORMULA(QUERY(REGEXEXTRACT(QUERY(IMPORTDATA(
     "https://www67.myfantasyleague.com/2019/export?TYPE=liveScoring&L=64741&APIKEY=&W=14&DETAILS=1&JSON=0?273"), 
     "where Col1 contains 'player id'", 0), 
     "(player id=""(\d+)).+?(score=""(\d+.\d+))"), 
     "select Col2,Col4"))
    

    spreadsheet demo

    【讨论】:

    • 谢谢玩家0!你能解释一下这个答案如何解决获取新数据的频率吗?我认为这更像是一种格式变化,但我显然遗漏了一些东西。再次感谢您之前的帮助!
    • 你是 99.9% 正确的。除非您的工作表中有太多公式,这可能会导致计算速度变慢,例如。没有立即获得新数据,而是稍后
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多