dimas102
7 лет назадJavaScript. Биржа-биржа, как слышите меня? Прием ...
![](https://img.golos.io/proxy/https://s25.postimg.org/p9eurn4un/Has.gif)
Непоседливость присуща мне с детства. Вот и сейчас, когда нужно сосредоточиться на штудировании всяческих пособий по JavaScript, пытаться запомнить тонкости, меня просто разжигает создать, что-нибудь более глобальное чем "Hello World!" .
В свете последних статей @primus‘a об алгоритмической торговле на биржах и его «угрозах» выдать успешный алгоритм, решил, пора. Пора начинать применять хотя бы те крохи знаний, что почерпнул из всевозможных сетевых источников. Начал серфить Сеть на предмет разбора кода роботов для торговых операций на биржах криптовалют. Не густо, присутствует всего пара материалов про бота на языке Python и куча коммерческих предложений по использованию готовых систем. Скачал и установил Python, сохранил на диск и запустил для пробы бота. Работает зараза, да еще как!!! Взял и накупил BTC практически по максималке дня и выставил ордера на продажу, с учетом процента биржи и маржи, естественно выше максималки, и это при падающем-то ВТС, говнюк!!!
Ладно, это лирика, десять долларов не жалко ради эксперимента. Посмотрел я на код этого бота, написанного на Python и понял, рановато мне еще туда лезть, а попробую ка я поковырять JavaScript, авось, что и получится. В сети ничего готового не нашел кроме API различных бирж на Github'e, но в них я не смог (пока, не смог) толком разобраться. В общем решил начать как бы с нуля, получить хоть какой-нибудь ответ от API биржи на мои ученические кодовые экзерциссы. И ... да, блин, мне это удалось!!!
![](https://img.golos.io/proxy/https://s25.postimg.org/5r1tsqedr/api_doc.gif)
Теперь по порядку. Не знаю почему, но начал я мучить API биржи Exmo, наверно потому, что там лежит тридцатка долларов. В описании API, которое находится в самом низу сайта биржи, нашел наипростейшее для меня, это список валют "currency", которыми торгуют на Exmo. Таким образом, задача - сделать запрос к API биржи и получить ответ, который содержит "возвращаемое значение" как на скрине описания.
Сделал скелет html страницы. Посерфил в сети на предмет Get и POST запросов. Примерно понял как это работает (думал, что понял, а зря так думал) и приступил к ваянию кода. Что бы понять работает участок кода или нет понавставлял кучу выводов на экран. Ответов от биржи не было. Потом прочитал, что если мой провайдер внес биржу в стоп-лист, то в адресе, к которому обращаемся, в данном случае https://api.exmo.com/v1/currency/ нужно зону "com" заменить на "me", а протокол "https" заменить на "http". В итоге код заработал, биржа ответила, урррааа, но как-то странно она
ответила, два раза на один запрос.
![](https://img.golos.io/proxy/https://s25.postimg.org/8jv1creq7/dubl_otvet.gif)
Бился я над этим часа полтора, пока не решил перечитать все, что нашел по GET запросам заново. Я уже писал выше, что рано решил о своем понимании, оказалось, я пострадал из-за своей самоуверенности и неверной расстановки акцентов полезности той или иной части описываемых методов. В общем, я в самом начале «забил» вот на эту проверку if (request.readyState != 4) в 20 строке и по собственной глупости убил в пустую кучу времени. Эх, как только я не крутил этот маленький кусочек кода!
![](https://img.golos.io/proxy/https://s25.postimg.org/f0402un9r/sorc.gif)
![](https://img.golos.io/proxy/https://s25.postimg.org/hdlxtv1ov/otvet.gif)
Эксперимент продолжается ...
![](https://img.golos.io/proxy/https://s25.postimg.org/f0402un9r/sorc.gif)
И глобальную переменную вводил и пытался организовать вывод на экран всеми известными мне способами, тремя :)), а чаю-то сколько выглушил. Ладно, главное для меня, что все заработало как я и хотел. Вот оно, правильный, "отпарсенный" ответ биржи Exmo на мой запрос о валютах биржи!!!
![](https://img.golos.io/proxy/https://s25.postimg.org/hdlxtv1ov/otvet.gif)
Не знаю, поздравлять себя или нет, но в момент, когда пришел ответ от биржи, пусть даже и двойной, я чувствовал, что я нереально крут и теперь могу горы свернуть и подковы в узлы завязать. :))) Хотя подковы, наверно реально смогу, если не разогнуть, то покривить точно, дури хватает, еще бы и памяти прибавить, совсем здорово было бы.
Вот листинг кода. Там 8 строка закомментирована, я экспериментировал с отправкой запроса к API по событию onclick при нажатии на кнопку, поэтому и код оформлен в виде функции. Если появится желание попробовать, то раскомментируйте эту строку и закомментируйте следующую 9-ую, она нужна для запуска функции при открытии окна(страницы).
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8"/>
<title>Exmo</title>
</head>
<body>
<body onload = from_api()>
<script language="javascript" type="text/javascript">
function from_api() {
var request = new XMLHttpRequest();
var url = "http://api.exmo.me/v1/currency/";
request.open("GET", url, true);
request.send();
request.onreadystatechange = function () {
if (request.readyState != 4) {
return
}
if (request.status === 200) {
var otvet = JSON.parse(request.responseText);
document.write(otvet);
} else {
document.write("Ошибка получения данных");
}
}
}
</script>
</body>
</html>
Всем удачи и здоровья! Ваш @dimas102