這是我的代碼:
function pricesV2(){
var url='https://prices.runescape.wiki/api/v1/osrs/mapping'
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText())
let myItems = new Map()
let myItem = new Map1()
json=eval('data')
json.forEach(function(elem){myItems.set(elem.id.toString(),elem.name)})
json.forEach(function(elem){myItem.set(elem.id.toString(),elem.examine)})
var url='https://prices.runescape.wiki/api/v1/osrs/latest'
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText())
var result = []
result.push(['#','name','examine','high','low','lowTime', 'highTime'])
for (let p in eval('data.data')) {
try{result.push([p,myItems.get(p),myItem.get(p),data.data.item(p).high,data.data.item(p).low,convertTimestamp(data.data.item(p).lowTime),convertTimestamp(data.data.item(p).highTime)])}catch(e){}
}
return result
}
了解 API 的變數可能很重要:
function prices(url){
//var url='https://prices.runescape.wiki/api/v1/osrs/latest'
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText())
var result = []
result.push(['#','high','low','highTime','lowTime'])
for (let p in eval('data.data')) {
try{result.push([p,data.data.item(p).high,data.data.item(p).low,data.data.item(p).lowTime, ,data.data.item(p).highTime])}catch(e){}
}
return result
}
function naming(url){
//var url='https://prices.runescape.wiki/api/v1/osrs/mapping'
var data = JSON.parse(UrlFetchApp.fetch(url).getContentText())
var result = []
result.push(["id","name","examine","members","lowalch","limit","value","highalch"])
json=eval('data')
json.forEach(function(elem){
result.push([elem.id.toString(),elem.name,elem.examine,elem.members,elem.lowalch,elem.limit,elem.value,elem.highalch])
})
return result
}
這些是 2 個 API 組合(
筆記:
如果要設定列的具體順序,請
head在上面的腳本中修改。的自定義函式
=SAMPLE()放入單元格時,如果出現錯誤,請重新打開Spreadsheet重新測驗。如果您想直接將值放入電子表格而不是自定義函式,請修改腳本。
參考:
- Google 表格中的自定義函式
- 地圖()
- 減少()
添加:
從以下 3 個新問題中,
- 現在我怎樣才能像頂行一樣更改為-> id、name、examine、members、lowalch、highalch、limit、high、low、lowtime、hightime?這怎么能在功能頭中完成,不能單獨編輯它們?
- 以及如何將 highTime 和 lowTime 格式化/轉換為時間 (hh:mm:ss)?
從The colums doesn't need in this specific order.,我沒有檢查列的順序。在這種情況下,正如我在回答中已經提到的,請head進行如下修改。關于您的第二個新問題,在這種情況下,請按如下方式決議 unix 時間。
因此,當這兩個新問題反映在我的示例腳本中時,它變成如下。
示例腳本:
function SAMPLE() {
const url1 = "https://prices.runescape.wiki/api/v1/osrs/mapping";
const url2 = "https://prices.runescape.wiki/api/v1/osrs/latest";
const [res1, res2] = [url1, url2].map(url => JSON.parse(UrlFetchApp.fetch(url).getContentText()));
const head = ['id', 'name', 'examine', 'members', 'lowalch', 'highalch', 'limit', 'high', 'low', 'lowTime', 'highTime'];
const obj1 = res1.reduce((o, e) => (o[e.id] = e, o), {});
const obj2 = Object.entries(res2.data).reduce((o, [k, v]) => (o[k] = v, o), {});
const keys = Object.keys(obj1).map(e => Number(e)).sort((a, b) => a - b);
const timeZone = Session.getScriptTimeZone();
const values = [head, ...keys.map(k => {
const o = Object.assign(obj1[k], obj2[k]);
return head.map(h => o[h] ? (['lowTime', 'highTime'].includes(h) ? Utilities.formatDate(new Date(o[h] * 1000), timeZone, "HH:mm:ss") : o[h]) : "");
})];
return values;
}
筆記:
關于您的以下第三個問題,
- 如何也可以添加此資料庫 <prices.runescape.wiki/api/v1/osrs/volumes>?
- 我認為這是一個新問題。在這種情況下,請將其作為新問題發布。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/466570.html
