temarazin (OP)
|
|
February 17, 2018, 07:16:45 PM Last edit: June 18, 2019, 03:06:22 AM by temarazin |
|
Привет всем! Я наконец-то разобрался как перетянуть цены с CoinMarketCap в гугл таблицу. Первым делом создаем новую таблицу в googlesheet. Нам нужно перетягивать данные в формате JSON, который гуглшит по умолчанию не поддерживает. Поэтому сначала добавим в свою таблицу скрипт. Код берем с этого репозитория - просто копируем всё в буфер. Далее в гугл-таблице переходим в Инструменты - Редактор скриптов. Вставляем скопированный скрипт, переименовываем файл в левом столбце как на картинке. Сохраняем и возвращаемся к пустой таблице. Теперь мы можем импортировать json с помощью =ImportJSONФормат формулы следующий: =ImportJSON("url"; "столбцы"; "параметры")Я для себя остановился на такой формуле =ImportJSON("https://api.coinmarketcap.com/v1/ticker/ethereum/"; "/name,/symbol,/price_usd,/percent_change_24h,/percent_change_7d"; "noHeaders") https://api.coinmarketcap.com/v1/ticker/ethereum/ - вместо ethereum подставляем нужный id валюты. Чтобы его узнать, перейдите на страницу необходимой валюты на сайте CMC - он будет виден в url. Например, у BCH путь выглядит так: https://coinmarketcap.com/currencies/bitcoin-cash/, значит id у него: bitcoin-cash "/name,/symbol,/price_usd,/percent_change_24h,/percent_change_7d"тут перечислены выводимые столбцы по такому синтаксису "/имя_столбца1,/имя_столбца2" Все столбцы можно посмотреть здесь"noHeaders" - параметр, который убирает названия столбцов. Я их убрал, потому что столбцы назвал сам.
Ну и для тех, кто не хочет заморачиваться, я выложу таблицу с готовым примером. Нажмите файл - создать копию, чтобы перетянуть её себе. Все изменения вносите в столбце А - просто меняете id валюты и у вас подгрузится нужная монета.
|
|
|
|
|
|
|
Remember that Bitcoin is still beta software. Don't put all of your money into BTC!
|
|
|
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
|
|
|
|
JohnSilver
Sr. Member
Offline
Activity: 1026
Merit: 280
🇧🇬 Crypto Since MMXIII
|
|
May 08, 2019, 01:12:35 PM Last edit: September 20, 2019, 06:58:58 AM by JohnSilver |
|
Обновлю информацию в связи с новом Pro-API на CoinMarketCap. Пока не буду затрагивать как сделать триггер для автообновление и т.д. Все что нужно знать, что после как загрузите двух скриптах (File: New / Script file, Rename, Save all), нужно нажать на JSONLOAD.gs (окно активное) и потом сверху на плей-иконку (срипт закончит с ошибка из за нулевых параметров, но не важно) – откроется окно для авторизации скрипта (чтобы скрипт смог менять таблицу). В этом окне выбираете ваш аккаунт, а потом внизу слева с мельком шрифте Advanced и появится еще внизу Go to <имя скрипта> (unsafe), и в конечное окно подтверждаете. Все! Замечания: В ваш гугл профил в раздел безопасности надо/сможете подтвердить/удалить статус доступа, иначе в страница поиска внизу будет иконка с предупреждение о безопасности аккаунта (доступ третья сторона). Все будет работать хорошо и без этого (информативно пояснил). Также смотрите в почту – иногда приходят оповещения об ошибки скрипта (более часто, если прикрутите триггер для автоматизации).ImportJSON.gs – https://github.com/bradjasper/ImportJSON (это оригинальный проект) ImportJSON-git852565b-patched.gs – https://drive.google.com/open?id=10Xfg4sggU7POQi9GsGyeiehhW8Hz-PgY--- ImportJSON-git852565b.gs 2019-05-08 17:28:29.737736133 +0300 +++ ImportJSON-git852565b-patched.gs 2019-05-08 17:31:03.965516139 +0300 @@ -377,7 +377,7 @@ } } } - } else if (isObject_(value)) { + } else if (value != null && isObject_(value)) { for (key in value) { if (parseData_(headers, data, path + "/" + key, state, value[key], query, options, includeFunc)) { dataInserted = true;
Пач нужен из за оформление JSON-а который возвращает CoinMarketCap – ячейки с стоимости null. Из за них колонки начинающих с пустая ячейка не отображается. Что-то в этом духе (исправлял год назад и не помню), но добавление "value != null" в проверку на 380 строка решает проблема и все верно отображается в таблицу. // REQUIRE: https://github.com/bradjasper/ImportJSON
/** * Imports a JSON feed and returns the results to be inserted * into a Google Spreadsheet. The JSON feed is flattened to * create a two-dimensional array. The first row contains the * headers, with each column header indicating the path to * that data in the JSON feed. The remaining rows contain the * data. * * @customfunction * @param {"https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"} url * A full REST API url with endpoint path and parameters. * @param {"/data"} query * A comma-separated list of JSON paths. Any path starting * with one of these paths gets imported. * @param {"noInherit,noTruncate,noHeaders"} options * A comma-separated list of options that alter processing of * the data: noInherit, noTruncate, rawHeaders, noHeaders, * allHeaders, debugLocation. * @param {"X-CMC_PRO_API_KEY"} apikey * An additional HTTP header by the script property key if * needed (add appropriate key/value pair to the properties). * @return A two-dimensional array containing the data. **/ function JSONLOAD(url, query, options, apikey) { const timeout = 1000; var scriptLock = LockService.getScriptLock(); while (! scriptLock.tryLock(timeout)) { Utilities.sleep(timeout / 10); }
var params = { 'headers': { 'Accept': "application/json", 'Accept-Charset': "utf-8", 'Accept-Encoding': "identity", 'Cache-Control': "public, max-age=60, must-revalidate" }, 'followRedirects': false, 'muteHttpExceptions': false }; if (apikey && isNaN(apikey) && apikey !== true) { var scriptProperties = PropertiesService.getScriptProperties(); apikey = apikey.toString(); params['headers'][apikey] = properties.getProperty(apikey); } var timer = new Date().getTime(); var dataArray = ImportJSONAdvanced(url, params, query, options, includeXPath_, defaultTransform_); timer = new Date().getTime() - timer; Utilities.sleep(Math.max(0, timeout - timer)); return dataArray; }
Help информацию для функцию JSONLOAD не обновлял, но годится... Если будете использовать скрипта для доступ к биржи, то надо удалить строкой с параметром X-CMC_PRO_API_KEY и эвентуально поменять верхней с Cache-Control (сейчас там поставлен кешь на 5 мин * 60 сек = 300 сек). LockService нужен тогда, когда делаете много запросов в одной таблице и они будут исполняются в очереди, а не все сразу в один момент.
|
|
|
|
|
melomanskiy
Copper Member
Jr. Member
Offline
Activity: 504
Merit: 6
|
|
May 23, 2019, 07:51:32 PM |
|
Довольно интересная штука, автору пришлось видимо заморочиться с кодами) Тут конечно он молодец. Но у меня, как у хомяка, возник вопрос, для какой цели делать такой документ? Меня устраивают готовые сервисы наподобии блокфолио.
|
|
|
|
btcleks
Jr. Member
Offline
Activity: 448
Merit: 3
|
|
May 24, 2019, 01:43:48 PM |
|
Ну мало ли зачем может понадобится, например чтобы потом чтото воротить аналитическое по этим данным. Начинание одобряю.
|
|
|
|
melomanskiy
Copper Member
Jr. Member
Offline
Activity: 504
Merit: 6
|
|
May 31, 2019, 08:25:37 PM |
|
Ну мало ли зачем может понадобится, например чтобы потом чтото воротить аналитическое по этим данным. Начинание одобряю.
Согласен. Уверен, что эта инфа будет полезна знатным криптовалютным любителям. Возможно в будущем данная вещь перерастет в что-то более масштабное и приобретет свою популярность среди криптоманов)
|
|
|
|
JohnSilver
Sr. Member
Offline
Activity: 1026
Merit: 280
🇧🇬 Crypto Since MMXIII
|
|
June 04, 2019, 06:36:44 AM Last edit: September 09, 2019, 09:48:24 PM by JohnSilver |
|
Добавлю простой метод как вручную обновлять данные. Примерно в ячейка A1 ставим Menu: Insert / Checkbox и через него запускаем перезагрузку (в A2 до A16 находится ID по каждую монету сортировано): =transpose( jsonload("/v1/cryptocurrency/quotes/latest?id="&join(",",A2:A16), join(",",arrayformula("/data/"&A2:A16&"/quote/USD/price")), "noInherit,noTruncate,noHeaders","X-CMC_PRO_API_KEY",A1))
|
|
|
|
Andrey123
|
|
June 04, 2019, 09:39:10 AM |
|
Ничего личного, но проку от этого ноль.... На СМС очень часто данные не верны. Если где-то был памп, и биржа у монеты перечислена, то сайт нифига не покажет этого....часто это замечал. Да и бывает монета торгуется, а на сайте этой биржи нет и в помине. Ну и анализировать поведение цен у крипты всей, занятие очень бесполезное....говорю как валютный трейдер со стажем. На крипте только хаос и везение
|
| Hello! Voluntary donations that will go towards the development of my coin. 34bwEhH3GMx6swYXt2NBfFbYGkdTcaWtXz....BTC | |
| |
|
|
|
|
thefever333
Jr. Member
Offline
Activity: 280
Merit: 1
|
|
September 04, 2019, 09:12:50 AM |
|
Ничего личного, но проку от этого ноль.... На СМС очень часто данные не верны. Если где-то был памп, и биржа у монеты перечислена, то сайт нифига не покажет этого....часто это замечал. Да и бывает монета торгуется, а на сайте этой биржи нет и в помине. Ну и анализировать поведение цен у крипты всей, занятие очень бесполезное....говорю как валютный трейдер со стажем. На крипте только хаос и везение Просто сайту нужно какое-то время, чтобы все данные проанализировать, если памп будет, то и там через какое-то время покажет )
|
|
|
|
JohnSilver
Sr. Member
Offline
Activity: 1026
Merit: 280
🇧🇬 Crypto Since MMXIII
|
|
September 08, 2019, 09:22:19 PM Last edit: September 20, 2019, 07:00:01 AM by JohnSilver |
|
// REQUIRE: https://github.com/bradjasper/ImportJSON
/** * Imports a JSON feed and returns the results to be inserted * into a Google Spreadsheet. The JSON feed is flattened to * create a two-dimensional array. The first row contains the * headers, with each column header indicating the path to * that data in the JSON feed. The remaining rows contain the * data. * * @customfunction * @param {"https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest"} url * A full REST API url with endpoint path and parameters. * @param {"/data"} query * A comma-separated list of JSON paths. Any path starting * with one of these paths gets imported. * @param {"noInherit,noTruncate,noHeaders"} options * A comma-separated list of options that alter processing of * the data: noInherit, noTruncate, rawHeaders, noHeaders, * allHeaders, debugLocation. * @param {"X-CMC_PRO_API_KEY"} apikey * An additional HTTP header by the script property key if * needed (add appropriate key/value pair to the properties). * @return A two-dimensional array containing the data. **/ function JSONLOAD(url, query, options, apikey) { const timeout = 1000; var scriptLock = LockService.getScriptLock(); while (! scriptLock.tryLock(timeout)) { Utilities.sleep(timeout / 10); }
var params = { 'headers': { 'Accept': "application/json", 'Accept-Charset': "utf-8", 'Accept-Encoding': "identity", 'Cache-Control': "public, max-age=60, must-revalidate" }, 'followRedirects': false, 'muteHttpExceptions': false }; if (apikey && isNaN(apikey) && apikey !== true) { var scriptProperties = PropertiesService.getScriptProperties(); apikey = apikey.toString(); params['headers'][apikey] = properties.getProperty(apikey); } var timer = new Date().getTime(); var dataArray = ImportJSONAdvanced(url, params, query, options, includeXPath_, defaultTransform_); timer = new Date().getTime() - timer; Utilities.sleep(Math.max(0, timeout - timer)); return dataArray; }
В связи с ограничение о запросах в минуту к API... PS: Также исправил кое что по кешь контроля (public на private или на no-cache можно менят если нужно).
|
|
|
|
JohnSilver
Sr. Member
Offline
Activity: 1026
Merit: 280
🇧🇬 Crypto Since MMXIII
|
|
September 09, 2019, 09:23:16 PM Last edit: September 09, 2019, 10:10:45 PM by JohnSilver |
|
Ничего личного, но проку от этого ноль.... На СМС очень часто данные не верны. Если где-то был памп, и биржа у монеты перечислена, то сайт нифига не покажет этого....часто это замечал. Да и бывает монета торгуется, а на сайте этой биржи нет и в помине. Ну и анализировать поведение цен у крипты всей, занятие очень бесполезное....говорю как валютный трейдер со стажем. На крипте только хаос и везение Не ограничивай свою фантазию только с CoinMarketCap. Вот пример с Waves DEX биржу: https://docs.google.com/spreadsheets/d/1_7EZO-70pH5E1PrYyKvwx_5ZwWwYoT-NsHSSADRmBqQ/edit?usp=sharing... а что нужно анализировать и на чем смотреть это другое дело – тут каждому по заслугам. PS: Вот прямо с блокчейна скачиваю наличности "аир-дров" и слежу на бирже какая текущая цена и количество на покупки и смогу ли продать их с прибыли.
|
|
|
|
Fartovy
|
|
September 13, 2019, 08:14:25 AM |
|
Круто. А можно как-то стягивать эти цены и вставлять на свой сайт? Не все, а главные - эфир, биток, рипл и т.д.
|
|
|
|
JohnSilver
Sr. Member
Offline
Activity: 1026
Merit: 280
🇧🇬 Crypto Since MMXIII
|
|
February 10, 2020, 01:41:59 PM Last edit: February 10, 2020, 03:26:34 PM by JohnSilver Merited by Symmetrick (2) |
|
Сделал все на библиотеку. Сверху из меню в скриптами можно вставлять ее. В девелопмент версию добавил и функция parse для прямая обработка JSON объектов. Script ID: 1moswqalWyN_ahYkjdP-lhBxy4tjHk_-E5RZC3Nfdcyrg77uOQ2xfpVS2 https://script.google.com/d/1moswqalWyN_ahYkjdP-lhBxy4tjHk_-E5RZC3Nfdcyrg77uOQ2xfpVS2/edit?usp=sharingФункция для таблицу примерно такая: var scriptProperties = PropertiesService.getScriptProperties();
function JSONLOAD(url, query, options, apikey, nonce) { let params = { 'headers': { 'Accept': "application/json", 'Accept-Charset': "utf-8", 'Accept-Encoding': "identity", 'Cache-Control': "no-cache,public,max-age=60,must-revalidate" }, 'followRedirects': false, 'muteHttpExceptions': false }; if (typeof apikey == "string") { params['headers'][apikey] = scriptProperties.getProperty(apikey); params['headers']['Cache-Control'] = "no-cache,private,max-age=60,must-revalidate"; } let response = UrlFetchApp.fetch(url, params); let jsonObject = JSON.parse(response.getContentText()); return ImportJSON.parse(jsonObject, query, options); }
|
|
|
|
Kzc_support
Newbie
Offline
Activity: 18
Merit: 0
|
|
March 07, 2020, 03:00:11 AM |
|
Доброе время суток !
Как можно получить информацию только по определенной паре и из определенной биржи ?
|
|
|
|
JohnSilver
Sr. Member
Offline
Activity: 1026
Merit: 280
🇧🇬 Crypto Since MMXIII
|
|
March 07, 2020, 06:51:55 AM |
|
Как можно получить информацию только по определенной паре и из определенной биржи ?
Делаешь запрос к АПИ определенной бирже и по определенной паре. Каков вопрос – такой и ответ...
|
|
|
|
Kzc_support
Newbie
Offline
Activity: 18
Merit: 0
|
|
March 23, 2020, 11:09:31 PM |
|
В бесплатном аккаунте это недоступно оказывается.
|
|
|
|
JohnSilver
Sr. Member
Offline
Activity: 1026
Merit: 280
🇧🇬 Crypto Since MMXIII
|
|
March 25, 2020, 09:49:12 AM |
|
В бесплатном аккаунте это недоступно оказывается.
Делай запрос прямо к АПИ конкретной бирже...
|
|
|
|
|