↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Desmоnd
18 октября 2020
Aa Aa
#фанфикс_знает_все

Господа программеры, поможите, люди добрые!

Ковыряю гуглескрипт для вставки в гуглетаблицы. Нашёл пример, который тырит из урла https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT вывод
И берёт из него значение price.

Мне нужно сделать так, чтобы из вот такого урл
https://test.deribit.com/api/v2/public/get_index_price?index_name=btc_usd
Из вот этого вывода скрипт возвращал значение index_price
18 октября 2020
19 комментариев
Вот что у меня получилось:
https://pastebin.com/b4PF6fN4


Проблема, что взять result неоткуда, там вложенность. Но я жабаскрипт вообще не знаю, по-обезьяньи модифицирую. Явно нужно не data.result, а что-то типа data.result.index_price (не точно, конечно, но как-то должен уметь синтаксис.
Чисто по синтаксису: return data.result.index_price
Обычное обращение к элементу многомерного массива (или тут объект).
ReFeRy
Я тож так подумал - но хренушки. Почему-то в итоге в ячейку таблицы ничего не выводится. Если поставлю data.jsonrpc - послушно выводит 2.0
Вообще, там не валидный json. В json все значения должны быть в двойных кавычках. Похоже json.parse как-то по другому такой json обрабатывает. В случае работы с обычным скриптом, все было бы просто, тестовый вывод куда надо и видишь, что там внутри переменной, а вот, что можно сделать в скрипте для гугл-таблиц, я понятия не имею.
А если просто data вывести что будет?
Mikie Онлайн
Твоя функция выглядит очень правильно.
Попробуй заменить return data.index_price на return String(data.index_price)
Мб он просто ждёт строку а ты ему даёшь число.

Перед return я бы попробовал для отладки window.alert(JSON.stringify(data))

В json все значения должны быть в двойных кавычках
Пруф или не было. Всё он корректно парсит. Ты спутал с ключами.
Verity Mage
Хез, оно в табличку суёт. А в чём это хню можно отладить? Пробовал как есть сунуть в jsfiddle - ничего не выдает. Ну и в ячейку гуглетаблицы тоже.

Mikie
Попробовал. Выдаёт в ячейку "undefined"

Алерт пробовал сунуть и туда и jsfiddle - что-то не выдает ничего.
Mikie Онлайн
вместо window.alert можно попробовать console.log
должно выплюнуть в консоль (которая в dev tools)

в крайнем случае попробуй просто в ячейку положить response.getContentText() и посмотреть, что там оказывается
т.е. просто return response.getContentText()
если в ячейке окажется что-то правильное, можно сравнить это правильное с результатом JSON.stringify(JSON.parse(json)) и с результатом String(JSON.parse(json))
я бы отлаживал так

А, ну и да
там ещё надо не забыть внутрь result зайти
т.е. не data.index_price, а data.result.index_price
upd
function DERIBIT_PRICE(coinpair) {
var url = "https://test.deribit.com/api/v2/public/get_index_price?index_name="+coinpair.toLowerCase()
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
var json = response.getContentText();
var data = JSON.parse(json);
return String(data.result.index_price)
}
Mikie
Код выдает в гуглетаблицах:

Ошибка
TypeError: Cannot read property 'index_price' of undefined (строка 6).

Кстати, а после строки с var url нужны или нет ; ?
Без него работает, но всё-таки.

А можно как-то сделать, чтобы было, например так:
1. Берётся полученное с урла и попадает в переменную Json.
2. Это дело парсится и попадает в переменную data
3. Переменная парсится тоже как-то и содержимое вложенных скобок попадает в, допустим, переменную result.

function DERIBIT_PRICE(coinpair) {
var url = "https://test.deribit.com/api/v2/public/get_index_price?index_name="+coinpair.toLowerCase()
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
var json = response.getContentText();
var data = JSON.parse(json);
var result = JSON.parse(data);
return String(result.index_price);
}

Ну это я так для примера, так как всё ещё почти ничего не понимаю.
Показать полностью
Mikie Онлайн
попробуй всё-таки поотлаживать
что находится в ячейке при такой функции?
function DERIBIT_PRICE(coinpair) {
var url = "https://test.deribit.com/api/v2/public/get_index_price?index_name="+coinpair.toLowerCase();
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
return response.getContentText();
}
И да, точку с запятой забывать не надо:)

Поясняю. Он говорит, что Cannot read property 'index_price' of undefined
это говорит о том, что data.result - почему-то undefined. Это значит, что либо data не имеет внутри себя result, либо сама data - undefined. Второй случай рассыпается на два: либо JSON.parse(json) почему-то не может распарсить и выдаёт undefined, либо внутри json уже лежит undefined.
Mikie
В общем, "слишком сложнааааааа". Я же не настоящий сварщик :)
Таки затянул меня обратно, да? :)
И, кстати, теперь горжусь собой :)
Styx
О_о
ReFeRy, та да... :)
Кстати, пришёл дядя Стикс и вынес диагноз в стиле того анекдота:
- Доктор, куда не ткну, всё болит.
- У вас палец сломан.

Оказалось, в коде всё ок. И в моём изначальном тоже. Просто я в ячейку вбил =DERIBIT_PRICE(btc_usd) без кавычек.

Чувствую себя полным идиотом.
Mikie Онлайн
Добро пожаловать в программирование. С инициацией тебя!
Mikie
Спасибо! До сих пор досадую от глупости ошибки. Это при том, что если бы я скопипастил то, что собственноручно написал в комменте, было бы все норм.
ПОИСК
ФАНФИКОВ









Закрыть
Закрыть
Закрыть