问题描述
我想检索特定加密货币的当前价格并更新我的 Google 表格中的某些字段。
<style>
h1.increase {
font-size: 15px;
}
</style>
<h1 class="increase">Header</h1>
@在浏览器中执行 URL 时,我为 dataAll 得到这个:
@在谷歌脚本编辑器中执行时,谷歌运行时环境有这个
@这里是 JSON 格式的 api-url 调用的原始数据响应,数据中只有 1 个加密条目:
var api_url = "API-URL";
var response = UrlFetchApp.fetch(api_url);
var dataAll = JSON.parse(response.getContentText());
为了更好的可读性,我只是将它粘贴到例如Notepad++ 并转到 Menu > JSON Viewer > Format JSON。
我知道这真的很基础,但是我现在如何遍历这个封装的对象并挖掘到适当的级别以便我可以读取价格?我只想选择一个特定的加密货币,例如id 为 1027 的以太坊并将其价格用于进一步用途。
我希望能够只选择适合我的投资组合的条目(例如,用 id: 区分)并在我的 Google 表格中获取特定单元格更新的价格。
非常感谢您的帮助!
最好的问候 多尼贝里
解决方法
if you want to get data by name just filter it
const api_url = 'API-URL';
const response = UrlFetchApp.fetch(api_url);
const dataAll = JSON.parse(response.getContentText());
const etherealData = dataAll.data.find(item => item.name === 'Ethereum');
,
function postDataToSheet() {
const ss=SpreadsheetApp.getActive();
const selected=['Symbol1','Symbol2']
const api_url = "API-URL";
let r= UrlFetchApp.fetch(api_url);
let rjson = r.getContentText();
let robj = JSON.parse(rjson);
let vs=[];
const ts=robj.status.timestamp;
const tc=robj.status.total_count;
vs.push(['TimeStamp',ts,'']);
vs.push('Total Count',tc,'');
vs.push(['Id','Symbol','Price']);
//***************************************************
//use this one to put them all on a sheet
robj.data.forEach((item,i)=>{
vs.push([item.id,item.symbol,item.quote.CHF.price])
});
const sh=ss.getSheetByName('Sheet1');
sh.getRange(1,1,vs.length,vs[0].length).setValues(vs);
//***************************************************
//use this one to put only the selected on a sheet
robj.data.forEach((item,i)=>{
if(~selected.index(item.symbol)) {
vs.push([item.id,item.quote.CHF.price])
}
});
const sh=ss.getSheetByName('Sheet1');
sh.getRange(1,vs[0].length).setValues(vs);
}
,
如果您只需要当前价格,我很确定您可以删除所有代码并使用 =IMPORTDATA("https://cryptoprices.cc/BTC/")
之类的东西来获取加密价格。
没有复杂的解析,没有身份验证,没有限制。