Я только изучаю скрипт приложения 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);
}