Скрипт приложения Google (скрипт java) и данные криптовалюты - PullRequest
0 голосов
/ 01 февраля 2019

Я только изучаю скрипт приложения google и скрипт 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) за пределы поля дляпетля.Примерно так (я пробовал код, и он не работает):

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, тогда ячейка (1, 1) должна выглядеть следующим образом: Цена в долларах США

Если пользователь ввел: var select = total_supply, тогда ячейка (1,1) должна выглядеть так: Total Supply

и т. Д.

3) Это может быть трудной частью.Каждый раз, когда я запускаю сценарий, я хочу, чтобы новый столбец создавался, и первая строка этого столбца должна содержать текущую метку времени, а во второй строке и далее новые данные.

Необходимо создать цикл для проверки того, что данные вводятся в правой строке для каждой криптовалюты.Порядок криптовалюты может измениться, когда данные возвращаются из нового вызова в coinmarketcap, поэтому предположим, что порядок такой же, как в старом столбце, или простая сортировка столбца по алфавиту не будет работать.

4) Цикл, который удаляет любую криптовалюту (полную строку), в которой есть пропущенные наблюдения.Данные из URL-адреса coinmarketcap содержат 100 монет / жетонов с наибольшей рыночной капитализацией, поэтому монета / жетон может быть ранжирована, например, 99 за один день (включен в вызов данных), а на следующий день - 101 (не включен в вызов данных), чтоприведет к отсутствию данных наблюдений.Самое простое решение этого состоит в том, чтобы просто удалить эти криптовалюты.

Любая помощь, которая достигает моих целей, изложенных в коде, будет наиболее ценной.

PS.У меня есть старый скрипт приложения Google (скрипт работает, но он медленный), который делает что-то похожее, но для данных фондового рынка, но я не уверен, насколько он хорош, и можно ли извлечь из него что-нибудь:

Предполагается, чточто у вас открыт лист Google с листами под названием: Blad1 и Panel, а ячейка (1,1) на листе Blad1 содержит

=IMPORTDATA("http://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NASDAQ&render=download") 

Старые сценарии google app для рыночной цены:

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);
}
...