在過去的一周里,我一直在嘗試在谷歌表格中為我的中學國際象棋俱樂部建立一個主排行榜。我們在Lichess.org網站上比賽,該網站有一個很好的API。我設法用ImportXML獲得了比賽的ID,但是我試圖訪問的結果似乎無法用任何添加到表單中的ImportJson腳本來訪問。
這是有學生成績的頁面 https://lichess.org/tournament/2bHOVix0 我想獲得前三名結果中每個人的 "姓名 "和 "分數"。 首先,我認為我不能僅僅使用ImportXML來從上述鏈接中獲得這些資料,盡管它在 "查看頁面源 "中顯示出來
。假設這不起作用,我使用 Lichess API 通過此鏈接下載帶有正確資料的 json 檔案 http://lichess.org/api/tournament/NguuB8pO/results
這個 "Importjson "是不是有什么原因不能作業?API將json描述為ndjson,這是否重要? =ImportJSON("http://lichess.org/api/tournament/NguuB8pO/results","/name") 我已經嘗試了至少20種不同的方法,在我的表單中添加了不同的importjson腳本。
提前感謝您提供的任何幫助。 -麥克
uj5u.com熱心網友回復:
嘗試一下,假設url = https://lichess.org/tournament/2bHOVix0 , table = /data/standing/players 和 xpath = /name /rank /rating /score
var resTable = [];
功能 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,"."))
如果(typeof xpath == 'object'){var liste = xpath.join().split(",")} else {var liste = xpath.split("|")}
如果(json.length){json.forEach(function(elem){getData(elem,liste)})}否則{getData(json,liste)}。
回傳 resTable
}
函式 getData(elem,liste){
var prov=[]
liste.forEach(function(chemin){
var t=chemin.split('/');
var obj=elem;
嘗試{
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://www.uj5u.com/shujuku/320546.html
標籤:
