05.10.2017, 23:34
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
Открыть JONS в гугл таблице, с помощью googl script
Приветствую!
В связи с тем что стал разбираться с торговлей в сфере криптовалюты, возникла необходимость взять данные с публичного API Polonix и для удобства создания своего калькулятора перенести их в таблицу эксель или гугл в удобном виде.
На просторах интернета нашел решение как с помощью googl script можно конвертировать JONS формат (в нем сервер отдает инфу) в текстовый и потом с помощью парсинга разнести данные по ячейкам.
Я уперся в то как дальше данные из парсинга распределить по колонкам и строчкам.
Нужно чтобы была "шапка" таблицы в которой указано: last, lowestAsk .... и тд, ниже каждая строка начиналась с валютной пары, и под соотсетсвующей ячейкой шапки, выводились соответсвующие валюте данные.
Пожалуйста подскажите как дальше данные распределить.
Также нужно будет сделать авто обновление каждые 30 сек.
Данные с биржи беру по этой ссылке https://poloniex.com/public?command=returnTicker
В приложении скрины.
|
|
05.10.2017, 23:37
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
Вот код из гугл скрипт:
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
}
Последний раз редактировалось Vasiliy83, 06.10.2017 в 10:52.
|
|
05.10.2017, 23:49
|
Профессор
|
|
Регистрация: 17.06.2016
Сообщений: 509
|
|
Пожалуйста, отформатируйте свой код!
Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]
О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
|
|
06.10.2017, 10:57
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
Сделал.
Вот тут https://poloniexapi.wordpress.com/20...poloniexpart7/ добрый человек рассказывает как создать код чтобы вытягивать данные с полоникса по одной валютной паре. С помощью этой статьи я и написал этот код. Но мне нужны немного другие данные и я не знаю как их распределить в ячейки.
|
|
06.10.2017, 14:22
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
Друзья, хелп плиз! Понял одно что нужно создать шапку для колонок, и уже согласно названию этих колонок возвращать в ячейки данные, но как это сделать не понимаю пока.
|
|
07.10.2017, 19:44
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
Изучаю 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
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,126
|
|
Vasiliy83,
var asks = parcedData.btc_usd.asks;
|
|
07.10.2017, 20:46
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
Рони, СПАСИБО!!! Заработало)))!
Но выполз косяк, название столбцов опустились под столбцы, теперь. Немного по переставлял местами, но название столбцов на верх не вернулись. Максимом что получилось сделать, это опустить данные на одну строку и вручную вписать название столбцов.
Как вернуть название столбцов в первую строку?
Сейчас вот такой скрипт:
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);
}
|
|
07.10.2017, 20:57
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
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:00.
|
|
07.10.2017, 21:01
|
Новичок на форуме
|
|
Регистрация: 05.10.2017
Сообщений: 9
|
|
Приложение
|
|
|
|