在过去的一周里,我一直在尝试在Google Sheets中为我的中学国际象棋俱乐部建立一个主排行榜。我们在Lichess.org网站上玩,它有一个很棒的应用程序接口。我设法使用ImportXML获得了锦标赛id,但是我试图访问的结果似乎无法通过添加到工作表中的任何ImportJson脚本来访问。
这是包含学生成绩源的页面,我想首先获得前3名中每一个的“姓名”和“分数”,我假设我不能只使用ImportXML从上面的链接中获取数据,即使它显示在"view page https://lichess.org/tournament/2bHOVix0“中。
假设这不起作用,我使用Lichess API通过这个链接http://lichess.org/api/tournament/NguuB8pO/results下载包含正确数据的json文件
这个"Importjson“不能工作有什么原因吗?API将json描述为ndjson有关系吗?= importjson ("http://lichess.org/api/tournament/NguuB8pO/results","/name")我尝试了至少20种不同的方法,并将不同的importjson脚本添加到我的工作表中。
提前感谢您所能提供的任何帮助。-Mike
发布于 2021-09-15 16:02:39
尝试一下,假设url = https://lichess.org/tournament/2bHOVix0,table = /data/standing/players,xpath = /name /rank /rating /score
var resTable = [];
function ImportJSON(url,table,xpath){
var source = UrlFetchApp.fetch(url).getContentText()
var jsonString = source.split('lichess.load.then(()=>{LichessTournament(')[1].split(')})</script>')[0]
var data = JSON.parse(jsonString)
var json = eval('data'+table.replace(/\//gm,"\."))
if (typeof xpath == 'object'){var liste = xpath.join().split(",")} else {var liste = xpath.split("|")}
if (json.length){json.forEach(function(elem){getData(elem,liste)})} else {getData(json,liste)}
return resTable
}
function getData(elem,liste){
var prov=[]
liste.forEach(function(chemin){
var t=chemin.split('/');
var obj=elem;
try{
for (var i=1;i<t.length;i++){obj=obj.item(t[i])}
if(typeof obj=='object'){prov.push('['+obj+']')}else{prov.push(obj)}
}
catch(e){prov.push('')}
})
resTable.push(prov)
}
Object.prototype.item=function(i){return this[i]};https://docs.google.com/spreadsheets/d/1eBFjpgwRAXyNVXOODaCAviyAQv9YsDoLBGqhzM9sm2M/copy
https://stackoverflow.com/questions/69195912
复制相似问题