谷歌应用程序脚本(Java脚本)和加密货币数据

时间:2019-02-01 19:48:08

标签: javascript google-apps-script cryptocurrency

我刚学谷歌应用程序的脚本和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);
}

0 个答案:

没有答案