Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Открыть JONS в гугл таблице, с помощью googl script (https://javascript.ru/forum/misc/70835-otkryt-jons-v-gugl-tablice-s-pomoshhyu-googl-script.html)

Vasiliy83 05.10.2017 23:34

Открыть JONS в гугл таблице, с помощью googl script
 
Вложений: 2
Приветствую!
В связи с тем что стал разбираться с торговлей в сфере криптовалюты, возникла необходимость взять данные с публичного API Polonix и для удобства создания своего калькулятора перенести их в таблицу эксель или гугл в удобном виде.

На просторах интернета нашел решение как с помощью googl script можно конвертировать JONS формат (в нем сервер отдает инфу) в текстовый и потом с помощью парсинга разнести данные по ячейкам.

Я уперся в то как дальше данные из парсинга распределить по колонкам и строчкам.
Нужно чтобы была "шапка" таблицы в которой указано: last, lowestAsk .... и тд, ниже каждая строка начиналась с валютной пары, и под соотсетсвующей ячейкой шапки, выводились соответсвующие валюте данные.

:help: Пожалуйста подскажите как дальше данные распределить.
Также нужно будет сделать авто обновление каждые 30 сек.
Данные с биржи беру по этой ссылке https://poloniex.com/public?command=returnTicker

В приложении скрины.

Vasiliy83 05.10.2017 23:37

Вот код из гугл скрипт:
function processXMRAPI() {
// В скобках пишем идентификатор электронной таблицы
       var ss = SpreadsheetApp.openById('***************************************'); 
// показываем скрипту что нужно работать с листом APIPull
      var APIPullSheet = ss.getSheetByName ("Eth/Btc");
// Очистить столбцы A, B, C & D 
      APIPullSheet.getRange('A2:K19999').clearContent();
//var создает переменную (поле AKA a), url - вызов переменной 'url'= "Http" сделать поле равным веб-адресу API Polo
      var url= "https://poloniex.com/public?command=returnTicker";
//Мы просто собираем данные, используя эти команды, в новые переменные, которые мы определяем. В первой строке мы создаем переменную с именем responseAPI и помещаем необработанные данные из URL Poloniex в это поле. Эти данные все еще находятся в формате JSON, и мы пока не можем использовать его в электронной таблице.
      var responseAPI = UrlFetchApp.fetch (url);
// И затем мы берем эти форматированные данные JSON и анализируем (разбиваем) их на поля, которые мы можем использовать в электронной таблице. Данные помещаются в поле parcedData.
      var parcedData = JSON.parse (responseAPI.getContentText ());
// Определим массив asks и запишем его из данных, полученных parced data 
}

Rasy 05.10.2017 23:49

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.

Vasiliy83 06.10.2017 10:57

Сделал.
Вот тут https://poloniexapi.wordpress.com/20...poloniexpart7/ добрый человек рассказывает как создать код чтобы вытягивать данные с полоникса по одной валютной паре. С помощью этой статьи я и написал этот код. Но мне нужны немного другие данные и я не знаю как их распределить в ячейки.

Vasiliy83 06.10.2017 14:22

Друзья, хелп плиз! Понял одно что нужно создать шапку для колонок, и уже согласно названию этих колонок возвращать в ячейки данные, но как это сделать не понимаю пока.

Vasiliy83 07.10.2017 19:44

Изучаю js, чтобы разобраться. понял что в этом отвте:
{"btc_usd":{"asks":[[4395,0.65708663],[4395.889,0.01375108],[4395.9,0.05719853],[4398,0.0276714],[4398.0000002,0.1966488],[4399,0.00228519],[4399.0000002,0.02590756],[4400,0.0202041],[4400.00000033,0.00073159],[4400.7840001,0.00031471]],"bids":[[4392.00000001,0.06314765],[4384.23103792,0.0005761],[4376,0.00177915],[4375,0.00137914],[4374.99999,0.01695014],[4374.99900001,0.00499905],[4374.999,0.28674424],[4373.81781981,0.00053624],[4371.3027953,0.0001521],[4370,0.23018268]]}}

Объект asks является вложенным. На сколько я понял путь к вложенному объекту можно указать так: var btc_usd.asks [] но гугл выдает следующую ошибку: Перед оператором отсутствует точка с запятой. (строка 9, файл Код).

Чтото я опять не понял (((.

вот код:
function scriptBTCUSD() { 
  
var ss = SpreadsheetApp.openById('***********************************');              // В скобках пишем индентификатор электронной таблицы
var APIPullSheet = ss.getSheetByName ("BTC/USD");                                              // показываем скрипту название листа
    APIPullSheet.getRange('A2:D11').clearContent();                                            // Очистить столбцы A, B, C & D 
var url = "https://yobit.net/api/3/depth/btc_usd?limit=10";                                    //var создает переменную (поле AKA a), url - вызов переменной 'url'= "Http" сделать поле равным веб-адресу API Polo
var responseAPI = UrlFetchApp.fetch (url);                                                     //Мы просто собираем данные, используя эти команды, в новые переменные, которые мы определяем. В первой строке мы создаем переменную с именем responseAPI и помещаем необработанные данные из URL Poloniex в это поле. Эти данные все еще находятся в формате JSON, и мы пока не можем использовать его в электронной таблице.
var parcedData = JSON.parse (responseAPI.getContentText ());                                   // И затем мы берем эти форматированные данные JSON и анализируем (разбиваем) их на поля, которые мы можем использовать в электронной таблице. Данные помещаются в поле parcedData.
var btc_usd.asks = [];                                                                                 // Определим массив asks и запишем его из данных, полученных parced data 
    asks.push(['Покупка','Объем']);                                                            // Создаем название столбцов для того чтобы поместить данные из аскс
   
for(var key in parcedData.asks)
{
asks.push(parcedData.asks[key]);
 } 
  
askRange = APIPullSheet.getRange(1, 1, asks.length, 2);                                         // Поместите данные «ask» в столбцы электронной таблицы A & B 
askRange.setValues(asks);
  
var bids = [];                                                                                  // Определим массив bids и запишем его из данных, полученных parced data
bids.push (['Продажа','Объем']);

for ( var key in parcedData.bids ) 
{ 
bids.push (parcedData.bids[key]); 
}

bidRange = APIPullSheet.getRange (1, 3, bids.length, 2);                                        // Получать данные «ставки» в столбцы электронной таблицы C & D 
bidRange.setValues (bids);

}


Помогите разобраться.

рони 07.10.2017 20:05

Vasiliy83,
var asks = parcedData.btc_usd.asks;

Vasiliy83 07.10.2017 20:46

Рони, СПАСИБО!!! Заработало)))!

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

Как вернуть название столбцов в первую строку?

Сейчас вот такой скрипт:
function scriptBTCUSD() { 
  
var ss = SpreadsheetApp.openById('**********************');              // В скобках пишем индентификатор электронной таблицы
var APIPullSheet = ss.getSheetByName ("BTC/USD");                                              // показываем скрипту название листа
    APIPullSheet.getRange('A2:E20').clearContent();                                            // Очистить столбцы A, B, C & D 
var url = "https://yobit.net/api/3/depth/btc_usd?limit=10";                                    //var создает переменную (поле AKA a), url - вызов переменной 'url'= "Http" сделать поле равным веб-адресу API Polo
var responseAPI = UrlFetchApp.fetch (url);                                                     //Мы просто собираем данные, используя эти команды, в новые переменные, которые мы определяем. В первой строке мы создаем переменную с именем responseAPI и помещаем необработанные данные из URL Poloniex в это поле. Эти данные все еще находятся в формате JSON, и мы пока не можем использовать его в электронной таблице.
var parcedData = JSON.parse (responseAPI.getContentText ());                                   // И затем мы берем эти форматированные данные JSON и анализируем (разбиваем) их на поля, которые мы можем использовать в электронной таблице. Данные помещаются в поле parcedData.

var asks = []                                                                                  // Определим массив asks и запишем его из данных, полученных parced data 
var asks = parcedData.btc_usd.asks;                                                            // Показываю что asks вложенный объект в btc_usd
asks.push(['Покупка','Объем']);                                            
                                                                                               // Создаем название столбцов для того чтобы поместить данные из аскс
for(var key in parcedData.asks) {asks.push(parcedData.asks[key]);} 
  
askRange = APIPullSheet.getRange(1, 1, asks.length, 2);                                         // Поместите данные «ask» в столбцы электронной таблицы A & B 
askRange.setValues(asks);
  
var bids = [];                                                                                  // Определим массив bids и запишем его из данных, полученных parced data
var bids = parcedData.btc_usd.bids;                                                             // Показываю что bids вложенный объект в btc_usd
    bids.push (['Продажа','Объем']);

for ( var key in parcedData.bids ) {bids.push (parcedData.bids[key]);}

bidRange = APIPullSheet.getRange (1, 4, bids.length, 2);                                        // Получать данные «ставки» в столбцы электронной таблицы D & E
bidRange.setValues (bids);
}

Vasiliy83 07.10.2017 20:57

var bids = []; Строчка лишняя))). Вот так то же самое получается:

function scriptBTCUSD() { 
  
var ss = SpreadsheetApp.openById('*****************************************');              // В скобках пишем индентификатор электронной таблицы
var APIPullSheet = ss.getSheetByName ("BTC/USD");                                              // показываем скрипту название листа
    APIPullSheet.getRange('A2:E20').clearContent();                                            // Очистить столбцы A, B, C & D 
var url = "https://yobit.net/api/3/depth/btc_usd?limit=10";                                    //var создает переменную (поле AKA a), url - вызов переменной 'url'= "Http" сделать поле равным веб-адресу API Polo
var responseAPI = UrlFetchApp.fetch (url);                                                     //Мы просто собираем данные, используя эти команды, в новые переменные, которые мы определяем. В первой строке мы создаем переменную с именем responseAPI и помещаем необработанные данные из URL Poloniex в это поле. Эти данные все еще находятся в формате JSON, и мы пока не можем использовать его в электронной таблице.
var parcedData = JSON.parse (responseAPI.getContentText ());                                   // И затем мы берем эти форматированные данные JSON и анализируем (разбиваем) их на поля, которые мы можем использовать в электронной таблице. Данные помещаются в поле parcedData.

var asks = parcedData.btc_usd.asks;                                                            // Определим массив asks и запишем его из данных, полученных parced data указав asks вложенный объект в btc_usd         
asks.push(['Покупка','Объем']);                                                                // Создаем название столбцов для того чтобы поместить данные из аскс

for(var key in parcedData.asks) {asks.push(parcedData.asks[key]);}                             // Поместите данные «ask» в столбцы электронной таблицы A & B 
  
askRange = APIPullSheet.getRange(2, 1, asks.length, 2);                                         
askRange.setValues(asks);
  
                                                                                               // Определим массив bids и запишем его из данных, полученных parced data указав bids вложенный объект в btc_usd  
var bids = parcedData.btc_usd.bids;                                                            // Показываю что bids вложенный объект в btc_usd
    bids.push (['Продажа','Объем']);

for ( var key in parcedData.bids ) {bids.push (parcedData.bids[key]);}

bidRange = APIPullSheet.getRange (2, 4, bids.length, 2);                                        // Получать данные «ставки» в столбцы электронной таблицы D & E
bidRange.setValues (bids);
}


И в этом скрипте я сдвинул данные на одну строчку в низ, но название столбцов не поднимается на 1 строку.

Vasiliy83 07.10.2017 21:01

Вложений: 1
Приложение


Часовой пояс GMT +3, время: 20:28.