You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ImportJSON将Lichess.org国际象棋赛事数据导入Google Sheets

关于ImportXML无法提取页面数据的问题

即便你在页面源码中能看到用户名、得分相关的字符串,也大概率无法通过ImportXML直接提取:
Lichess的赛事页面数据多数是嵌入在<script>标签中的JS变量,不属于标准HTML DOM节点。ImportXML仅支持通过XPath定位结构化的XML/HTML节点,无法直接解析JS代码内的JSON片段,即便你用XPath拿到了完整的script标签文本,也需要额外用正则匹配字段,稳定性极差,不推荐使用该方案。

关于ImportJSON无法生效的原因

你猜测的原因是正确的,该API返回的是**NDJSON(换行分隔JSON)**格式,而非普通ImportJSON脚本支持的标准单JSON结构:

  • 标准JSON的赛事结果会用外层数组包裹所有选手对象,整体是一个合法的JSON结构
  • Lichess的结果API为了支持流式返回大数量数据,每一行是一个独立的选手JSON对象,没有外层数组包裹,常规JSON解析器会直接抛出格式错误,所以所有通用ImportJSON脚本都无法正常解析。

适配方案

直接使用自定义Google Apps Script处理NDJSON格式即可,操作步骤如下:

  1. 打开目标Google Sheets,点击顶部菜单栏「扩展程序」-「Apps脚本」,删除编辑器内的默认代码
  2. 粘贴如下代码:
function IMPORT_LICHESS_RESULTS(tournamentId, resultLimit = 3) {
  const requestUrl = `https://lichess.org/api/tournament/${tournamentId}/results?nb=${resultLimit}`;
  const response = UrlFetchApp.fetch(requestUrl);
  const ndjsonContent = response.getContentText();
  // 拆分NDJSON行,过滤空行
  const resultLines = ndjsonContent.split('\n').filter(line => line.trim());
  const output = [['用户名', '得分']];
  // 逐行解析JSON提取目标字段
  resultLines.forEach(line => {
    const userData = JSON.parse(line);
    output.push([userData.username, userData.score]);
  });
  return output;
}
  1. 点击顶部保存按钮,给项目任意命名,首次运行需要按照提示完成权限授权(提示未验证应用时点击「高级」-「继续访问」即可,代码为自定义脚本无安全风险)
  2. 回到表格页面,在任意空白单元格输入公式 =IMPORT_LICHESS_RESULTS("赛事ID", 要获取的排名数量) 即可,比如你要获取赛事NguuB8pO的前三名,输入 =IMPORT_LICHESS_RESULTS("NguuB8pO",3) 即可自动返回带表头的两列结果。

内容的提问来源于stack exchange,提问作者Michael Cohen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:27:01