Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
kovatelj
7 лет назад

Телеграмм бот на Java. Часть 2

Доброго времени суток уважаемые подписчики, а также не менее уважаемые участники портала Голос!

Ссылка на 1 часть.

Как вы уже поняли, это 2 часть моих мытарств по написанию телеграмм бота на Java. Как и говорил раньше, я хочу добавить в своего бота выдачу информации с криптовалютной биржи. Так я по большей части торгую (точнее пытаюсь торговать) на Bittrex.com, то с нее я и начну.

Итак, для начала я прошел по ссылке https://bittrex.com/Home/Api, для того чтобы узнать какие api запросы поддерживает биржа. Список я приводить не буду, вы сами можете с ним ознакомиться по ссылке. Api биржи делятся на 3 категории:

  •  Public - публичные, то есть доступные любому. Для их использования не нужно авторизоваться, но и толку для меня особо никакого от них нет :) С их помощью можно посмотреть список альткоинов, их курсы и т.д.
  •  Account  - позволяют запрашивать баланс аккаунта, открытые ордера, адреса кошельков и т.д. Вот эта группа как-раз мне и нужна. Для использования этих запросов нужно получить ключи в своем личном кабинете на бирже.
  • Market - позволяет размещать ордера, то бишь торговать удаленно. На данный момент меня это не интересует, да и сами разработчики советуют использовать эту группу ключей с большой аккуратностью. Также требуется получение секретных ключей в личном кабинете. 

 Как я уже сказал, нужно получить секретные ключи для удаленной авторизации на бирже. Это можно сделать в личном кабинет, перейдя в настройки и выбрав пункт API Keys. Но сначала вам обязательно нужно включить двухфакторную авторизацию. 

А вот потом выяснилось самое интересное :) Оказывается, для того чтобы сделать запрос на биржу, его нужно предварительно зашифровать по стандарту  HMAC-SHA512. Так как я никогда не сталкивался с криптографией, то я полез гуглить примеры работы с Bittrex. И оказалось, что существует несколько библиотек под Java, для работы с этой биржей. Но тут опять появилась проблема, все они были не в виде jar файла, а в виде папки с исходниками. Пришлось снова активно гуглить и выяснять как добавлять такого рода библиотеки, а также учитывать зависимости для них. После нескольких проб и ошибок я наконец смог заставить работать билиотеку от platelminto в своем проекте. Признаюсь, что пока что заработал тестовый пример, приведенный самим автором и информацию полученную от биржи он выдает в консоль в виде JSON объектов. Так что разбор результата и выдачу его с помощью бота в телеграмм я буду описывать в следующей части. А пока что я постараюсь объяснить как же все-таки добавить библиотеку в проект.

Для начала нам нужно скачать библиотеку себе на диск. Переходим по ссылке https://github.com/platelminto/java-bittrex и кликаем на Clone of downloads, скачивая копию архива. Распаковываем архив куда вам удобно, далее идем в Intellij IDEA - File - Project Structure - Modules и справа выбираем вкладку Sources далее нажимаем на +Add Content Root и выбираем нашу папку с библиотекой 

Для работы этой библиотеки нужно будет установить еще Google gson и Apache HttpClient. Поэтому не закрывая настройки, слева выбираем Libraries, в центральной колонке жмем зеленый + и в выпадающем списке выбираем From Maven, появляется окошко

в строке поиска вбиваем google gson и выбираем последнюю версию, я поставил галку напротив Download to и указал папку куда скачается библиотека, вы можете этого не делать, но тогда если вам в следующий раз нужна будет эта библиотека, то придется ее заново искать и добавлять. Таким же образом добавляем и Apache HttpClient. С установкой библиотек мы закончили. 

Теперь в папке с нашим проектом бота нужно создать текстовый файл с именем keys.txt, в который копипастим наши ключи от биржи вот в таком формате:

apikey: "key"

secret: "secret"

Как я уже сказал, свой код для запросов я пока что не писал, заморачивался с поиском и установкой библиотек, поэтому я просто взял готовый пример который запрашивает адреса и балансы с вашего аккаунта на бирже:

/**

* Created by Kovatelj on 06.07.2017.

*/

import org.telegram.telegrambots.ApiContextInitializer;

import org.telegram.telegrambots.TelegramBotsApi;

import org.telegram.telegrambots.exceptions.TelegramApiRequestException;

import java.util.HashMap;

import java.util.List;

public class Main {

   public static void main(String[] args) {

       ApiContextInitializer.init();

       TelegramBotsApi botsApi = new TelegramBotsApi();

       try {

           botsApi.registerBot(new telegramBot());

       } catch (TelegramApiRequestException e) {

           e.printStackTrace();

       }

       Bittrex wrapper = new Bittrex();

       wrapper.setAuthKeysFromTextFile("keys.txt");

       String rawResponse = wrapper.getMarketSummary("BTC-LTC");



       List<HashMap<String, String>> responseMapList = Bittrex.getMapsFromResponse(rawResponse);

       // In some cases, only 1 map is actually returned - if this is assured:

       HashMap<String, String> onlyMap = responseMapList.get(0);

       // See available information using present keys

       for (String key : onlyMap.keySet())

           System.out.print(key + " ");

       System.out.println();

       // Get wanted value using a key found in the KeySet

       onlyMap.get("Volume");

       // Some responses have more than 1 map - the List must be traversed in these cases.

       String otherRawResponse = wrapper.getBalances();

       List<HashMap<String, String>> allBalancesMapList = Bittrex.getMapsFromResponse(otherRawResponse);

       for (HashMap<String, String> map : allBalancesMapList)

           System.out.println(map);

       // And then the wanted map can be used

       allBalancesMapList.get(3).get("Balance");

   }

}

Результат в консоли должен выглядеть примерно вот так

High MarketName BaseVolume PrevDay TimeStamp Created Last OpenSellOrders Low Volume OpenBuyOrders Ask Bid 
{CryptoAddress=be034d58d24e47279f42c28ab1360dba06a01b87d398424b9b2c823484520a59, Currency=ARDR, Available=0.02223057, Balance=0.02223057, Pending=0.00000000}
{CryptoAddress=iN7ZbZBG46FSPBruaGGeZzYBgoewiLEaQn, Currency=BSD, Available=0.00000000, Balance=50.80618000, Pending=0.00000000}

То есть как видите это набор JSON объектов. Работу по их разбору я выложу в следующий раз.


Всем спасибо за внимание, не забывайте на меня подписываться :)


54
22.173 GOLOS
На Golos с October 2016
Комментарии (1)
Сортировать по:
Сначала старые