直到大约一周前,我的Google表格代码一直没有拉高代币价格。然后随机停止,并一直显示错误; #N / A或正在加载。.
将鼠标悬停在错误单元格上时,它会显示“错误,导入的内容为空”。
我的研究使我了解到,现在有新的coinmarketcap pro API代替了旧的。好奇这是否是引起问题的原因吗?
但是我不确定是否就是这样。请帮忙。
拉价公式为(示例):
=importxml("https://coinmarketcap.com/currencies/bitcoin/","//*[@id=" & CHAR(34) & "quote_price" & CHAR(34) &"]/span[1]")
然后我在下面显示了一个相关的脚本。
function onOpen() {
Spreadsheetapp.getactiveSpreadsheet().getRangeByName("TodayRng").setvalue(new Date())
}
function getPriceStatic(coinName,currency)
{
try {
var request_url = "https://api.coinmarketcap.com/v1/ticker/" + coinName + "?convert=" + currency
/*var request_url = "https://pro-api.coinmarketcap.com/v1/ticker/" + coinName + "?convert=" + currency*/
var response = UrlFetchApp.fetch(request_url);
var json = response.getcontentText();
var data = JSON.parse(json);
var priceval = {"EUR" : data[0].price_eur,"USD" : data[0].price_usd,"BTC" : data[0].price_btc,"AUD" : data[0].price_aud,"BRL" : data[0].price_brl,"CAD" : data[0].price_cad,"CHF" : data[0].price_chf,"CNY" : data[0].price_cny,"RUB" : data[0].price_rub,"GBP" : data[0].price_gbp,"HKD" : data[0].price_hkd,"IDR" : data[0].price_idr,"INR" : data[0].price_inr,"JPY" : data[0].price_jpy,"KRW" : data[0].price_krw,"MXN" : data[0].price_mxn,"24h_volume_usd" : data[0]["24h_volume_usd"],"market_cap_usd" : data[0].market_cap_usd,"available_supply" : data[0].available_supply,"total_supply" : data[0].total_supply,"max_supply" : data[0].max_supply,/*added by me*/
"percent_change_1h" : data[0].percent_change_1h,"percent_change_24h" : data[0].percent_change_24h,"percent_change_7d" : data[0].percent_change_7d,"last_updated" : data[0].last_updated }
var price = parseFloat(priceval[currency])
return price
}
catch(err) {
getPriceStatic(coinName,currency)
}
}
function getPriceUpdatable(coinName,currency,timestamp)
{
try {
var request_url = "https://api.coinmarketcap.com/v1/ticker/" + coinName + "?convert=" + currency
/*var request_url = "https://pro-api.coinmarketcap.com/v1/ticker/" + coinName + "?convert=" + currency*/
var response = UrlFetchApp.fetch(request_url);
var json = response.getcontentText();
var data = JSON.parse(json);
var priceval = {"EUR" : data[0].price_eur,timestamp)
}
}
function test_onEdit() {
onEdit({
range : Spreadsheetapp.getactiveSpreadsheet().getactiveCell(),});
}
function onEdit(e)
{
e.range = Spreadsheetapp.getactiveSpreadsheet().getactiveCell();
if (e.range.getSheet().getName() != "Transactions") return;
var ss = Spreadsheetapp.getactiveSpreadsheet();
var ws = ss.getSheetByName("Transactions")
var currency = ss.getRangeByName("Currency").getvalue();
var row = e.range.getRow();
var feeCurrColumn = ss.getRangeByName("FeeCurrencyColumn").getcolumn();
var acqCurrColumn = ss.getRangeByName("AcquiredCurrencyColumn").getcolumn();
var bookPriceEurCol = ss.getRangeByName("BookPriceEURCol").getcolumn();
var bookPriceBtcCol = ss.getRangeByName("BookPriceBTCCol").getcolumn();
var feeBookPriceEurCol = ss.getRangeByName("FeeBookPriceEURCol").getcolumn();
var feeBookPriceBtcCol = ss.getRangeByName("FeeBookPriceBTCCol").getcolumn();
var acqCurrNameCol = ss.getRangeByName("AcquiredCurrencyNameColumn").getcolumn();
var feeCurrNameCol = ss.getRangeByName("FeeCurrencyNameColumn").getcolumn();
var acqIsCryptoCol = ss.getRangeByName("AcquiredIsCryptoCol").getcolumn();
var feeIsCryptoCol = ss.getRangeByName("FeeIsCryptoCol").getcolumn();
var acqAmountCol = ss.getRangeByName("AcquiredAmountCol").getcolumn();
var feeAmountCol = ss.getRangeByName("FeeAmountCol").getcolumn();
var transDateColumn = ss.getRangeByName("TransactionDateColumn").getcolumn();
var a = e.range.getcolumn();
if (e.range.getcolumn() == feeAmountCol || e.range.getcolumn() == acqAmountCol || e.range.getcolumn() == feeCurrColumn || e.range.getcolumn() == acqCurrColumn)
{
if (e.range.getcolumn() == acqAmountCol || e.range.getcolumn() == acqCurrColumn) {
if (e.range.getvalue().length == 0) {
ws.getRange(row,bookPriceEurCol).setvalue("");
ws.getRange(row,bookPriceBtcCol).setvalue("");
ws.getRange(row,transDateColumn).setvalue("");
} else {
updateBookPrice(ws,row,bookPriceEurCol,bookPriceBtcCol,acqIsCryptoCol,acqCurrNameCol)
updateFeeBookPrice(ws,feeBookPriceEurCol,feeBookPriceBtcCol,feeIsCryptoCol,feeCurrNameCol,feeAmountCol,acqAmountCol)
ws.getRange(row,transDateColumn).setvalue(new Date());
}
}
if (e.range.getcolumn() == feeAmountCol || e.range.getcolumn() == feeCurrColumn ) {
if (e.range.getvalue().length == 0) {
ws.getRange(row,feeBookPriceEurCol).setvalue("");
ws.getRange(row,feeBookPriceBtcCol).setvalue("");
} else {
updateFeeBookPrice(ws,transDateColumn).setvalue(new Date());
}
}
}
Logger.log("exit")
}
function updateBookPrice(ss,acqCurrNameCol)
{
if (ss.getRange(row,acqIsCryptoCol).getvalue() == true) {
var coinName = ss.getRange(row,acqCurrNameCol).getvalue();
var val = getPriceStatic(coinName,currency);
ss.getRange(row,bookPriceEurCol).setvalue(val);
val = getPriceStatic(coinName,"BTC");
ss.getRange(row,bookPriceBtcCol).setvalue(val);
} else {
ss.getRange(row,bookPriceEurCol).setvalue(0);
ss.getRange(row,bookPriceBtcCol).setvalue(0);
}
}
function updateFeeBookPrice(ss,acqAmountCol)
{
var acqAmount = ss.getRange(row,acqAmountCol).getvalue();
var feeAmount = ss.getRange(row,feeAmountCol).getvalue();
var finalEurVal = 0;
if (ss.getRange(row,feeIsCryptoCol).getvalue() == true) {
var coinName = ss.getRange(row,feeCurrNameCol).getvalue();
finalEurVal = feeAmount * getPriceStatic(coinName,currency) / acqAmount;
ss.getRange(row,feeBookPriceEurCol).setvalue(finalEurVal);
} else {
finalEurVal = feeAmount/acqAmount;
ss.getRange(row,feeBookPriceEurCol).setvalue(finalEurVal);
}
ss.getRange(row,feeBookPriceBtcCol).setvalue(finalEurVal/getPriceStatic("bitcoin",currency));
}