我刚学谷歌应用程序的脚本和Java脚本所以请温柔:-) 我有这个Google应用程式指令码(Java指令码),可从中撷取资料 网站coinmarketcap,它的运行情况很好,但是我想对其进行一些修改,我需要一些帮助。
function pullJSON()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var sheet = ss.getActiveSheet();
var response = UrlFetchApp.fetch("https://api.coinmarketcap.com/v1/ticker/");
var dataAll = JSON.parse(response.getContentText());
var dataSet = dataAll;
var rows = [], data;
Logger.log(dataSet);
for (i = 0; i < dataSet.length; i++)
{
data = dataSet[i];
rows.push([data.id,data.price_usd]); //your prefered data variable
}
dataRange = sheet.getRange(1, 1, rows.length, 2);
dataRange.setValues(rows);
}
https://drive.google.com/file/d/1v5nNgtowYR23dmmpBZA9aOJyX_H7DfEh/view
我要对其进行以下修改:
1)将首选数据变量(price_usd)移到for循环之外。像这样(我曾尝试的代码和它不工作):
var select = price_usd; //your prefered data variable
for (i = 0; i < dataSet.length; i++)
{
data = dataSet[i];
rows.push([data.id,data.select]);
}
我认为用户在循环外部而不是循环内部更改变量的值更加直观。
2)在工作表的单元格(1,1)中,我希望用户选择他或她想要的数据。为此需要创建一个新行。如果用户输入:var select = price_usd
,则cell(1,1)应该显示为:USD
如果用户输入:var select = total_supply
,则cell(1,1)应该显示为:
总供应量
等等等
3)这可能是困难的部分。每次运行脚本时,我都希望创建一个新列,并且该列的第一行应包含当前时间戳,从第二行开始一直到新数据为止。
必须创建一个循环以检查是否在每种加密货币的右行输入了数据。当数据从新的调用返回到coinmarketcap时,加密货币的顺序可以更改 所以只是假设的顺序相同,较旧的列或简单地按字母顺序排序的列 不管用。
4)删除任何缺少观察值的任何加密货币(完整行)的循环。来自coinmarketcap网址的数据包含100个市值最大的硬币/代币,因此一个硬币/代币 可以将某一天的排名(例如,数据通话中包括)排名为99,将第二天的排名为101(数据通话中不包含)排名,这将导致缺少数据观测。最简单的解决方案是删除 这些加密货币。
任何能帮助我实现代码设定目标的帮助都将受到赞赏。
PS。我有一个旧的Google应用程序脚本(该脚本可以运行,但是速度很慢),该脚本执行类似的操作,但适用于股市数据,但是我不确定它的性能以及是否可以从中学到任何东西:
假设您打开了一个Google表格,其中包含名为Blad1和Panel的表格,并且表格Blad1中的cell(1,1)包含
=IMPORTDATA("http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download")
旧的股市价格Google应用程序脚本是:
function PanelCreation_Stock()
{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sourceSheet = ss.getSheetByName("Blad1");
var dstSheet = ss.getSheetByName("Panel");
var curDat = new Date();
var day1 = curDat.getDay();
if(day1 == 0 || day1 == 1)
{
return;
}
var lCol = dstSheet.getLastColumn();
var srcdate = dstSheet.getRange(1, 1, 1, lCol).getValues();
for(var k=1;k<=srcdate[0].length-1;k++)
{
if(Utilities.formatDate(srcdate[0][k],"GMT", "dd-MMM-yy") == Utilities.formatDate(curDat,"GMT", "dd-MMM-yy"))
{
return;
}
}
var snRows = sourceSheet.getLastRow();
var dnRows = dstSheet.getLastRow();
var srcStock = sourceSheet.getRange("A2:A" + snRows).getValues();
var srcLastSale = sourceSheet.getRange("C2:C" + snRows).getValues();
var dstStock = dstSheet.getRange("A2:A" + dnRows).getValues();
var dstLastSale = dstSheet.getRange("Z2:Z" + dnRows).getValues();
for(var j=0;j<dnRows-1;j++)
{
dstLastSale[j][0]="n/a";
}
var flag = "true";
var foundStock;
for(var i=0;i<snRows-1;i++) //snRows
{
var sStockVal = srcStock[i][0];
//var foundStock = ArrayLib.indexOf(dstStock,0, sStockVal);
flag = "false";
for(var j = 0; j < dnRows-1; j++)
{
if(dstStock[j][0].toString().toUpperCase() == srcStock[i][0].toString().toUpperCase())
{
flag = "true";
foundStock = j;
break;
}
}
if(flag=="true")
{
dstLastSale[foundStock][0] = srcLastSale[i][0];
}
else
{
var dnRows1 = dstSheet.getLastRow()+1;
dstSheet.getRange("A" + dnRows1).setValue(srcStock[i][0]);
dstSheet.getRange(dnRows1,lCol+1,1,1).setValue(srcLastSale[i][0]);
for(var k=2; k<=lCol; k++)
{
if(dstSheet.getRange(dnRows1, k).getValue()=="")
{
dstSheet.getRange(dnRows1, k).setValue("n/a");
}
}
}
}
dstSheet.getRange(1,lCol+1).setValue(curDat);
dstSheet.getRange(2, lCol+1, dstLastSale.length, 1).setValues(dstLastSale);
}