User Tools

Site Tools


Sidebar


Здравствуйте!

Меня зовут Михаил!
Я системный администратор
и наполняю эту wiki,
решая разнообразные IT-задачки.

Моя специализация - виртуализация!

Я всегда готов помочь Вам
наладить IT-инфраструктуру
за скромное вознаграждение!

mike@autosys.tk
+7 (910) 911-96-23

rubyonrails:торговыи-бот-btc-e

Начало работ: 28.10.13

Задачи:

0. Каркас
0.1 Задаем Параметры для работы.
0.2 Авторизуем пользователя.

1. Получаем данные с биржи.
Ссылки API приведены тут:
https://hdbtce.kayako.com/Knowledgebase/Article/View/28/4/public-api

Получение данных в формате JSON и парсинг на Ruby:

require 'json'
require 'open-uri'
obj = JSON.parse(open('http://uri-path/to/json/data').read)

Или для работы с SSL:

require 'json'
require 'open-uri'
require 'openssl'
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
obj = JSON.parse(open('https://btc-e.com/api/2/ltc_btc/ticker').read)

Данные в результате выдаются в виде вложенного хеша. Примерно так:

ticker = JSON.parse(open('https://btc-e.com/api/2/ltc_btc/ticker').read)
=> 
{"ticker"=>{"high"=>0.012, "low"=>0.0108, "avg"=>0.0114, "vol"=>2958.66392, "vol_cur"=>258717.67768, "last"=>0.01116, "buy"=>0.01123, sell"=>0.01116, "updated"=>1384254007, "server_time"=>1384254008}}

То есть тут в хеш ticker вложен хеш в кучей строковых ключей (high, low и т.д).

Доступ к элемента получаем так:

 @server_time = Time.at(ticker["ticker"]["server_time"])

или так:

     @high_price = ticker["ticker"]["high"]
    @low_price = ticker["ticker"]["low"]

Теперь можно сделать две страницы, одна из которых будет основной, а вторая - содержать обновляемые данные и обновлять только данные, а не всю страницу. Поехали.
У нас есть ресурс pages - это просто тестовый ресурс.

Кусочек файла маршрутов:

  get "pages/market"
  get "pages/data"

Кусочек с методами из файла контроллер ресурса pages - pages_controller.erb:

def data
     @title = "Data"
   require 'json'
    require 'open-uri'
    require 'openssl'
    ticker = JSON.parse(open('https://btc-e.com/api/2/ltc_btc/ticker').read)
 #{"ticker"=>{"high"=>0.012, "low"=>0.0108, "avg"=>0.0114, "vol"=>2958.66392, "vol
 #_cur"=>258717.67768, "last"=>0.01116, "buy"=>0.01123, "sell"=>0.01116, "updated"
 # =>1384254007, "server_time"=>1384254008}}
    @server_time = Time.at(ticker["ticker"]["server_time"])
    @high = ticker["ticker"]["high"]
    @low= ticker["ticker"]["low"]
    @avg= ticker["ticker"]["avg"]
    @vol= ticker["ticker"]["vol"]
    @vol_cur= ticker["ticker"]["vol_cur"]
    @last= ticker["ticker"]["last"]
    @buy= ticker["ticker"]["buy"]
    @sell= ticker["ticker"]["sell"]
    @updated= Time.at(ticker["ticker"]["updated"]) 
end
  
  def market
    @title = "market"
  end

Тут в методе data мы получаем данные с биржи в формате json и затем разбираем их.

Основная страница ./app/pages/market.html.erb

<h1> Это страница market, внутри которой обновляется страница data</h1>


<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
 $(document).ready(function() {
   $("#responsecontainer").load("/pages/data");
    var refreshId = setInterval(function() {
    $("#responsecontainer").load("/pages/data");
   }, 1000);
   $.ajaxSetup({ cache: false });
});
</script>

<div id="responsecontainer">
</div>

Тут самое интересное - это скрипт. Этот скрипт дергает страницу указанную в .load(“/pages/data”) и помещает результат в responsecontainer. Затем мы выводим то что скрипт получил с помощью конструкции <div id=“responsecontainer”></div>.

Ну и страница /pages/data, которая лежит в файле ./app/pages/data.html.erb:

    <h1>Это страница c данными Рынка</h1>
    <p>
      Тут мы выводим разную информацию с биржи BTC-E.
    </p>
    <p> Время сервера BTC-E: <%= @server_time %></p>
    <p>Максимальная цена: <%= @high %></p>
    <p>Минимальная цена: <%= @low %></p>
    <p>Средняя цена: <%= @avg %></p>
     <p>Объем торгов: <%= @vol %></p>
	<p>Объем торгов в парной валюте: <%= @vol_cur %></p>
	<p>Последняя цена: <%= @last %></p>
	<p>Покупка: <%= @buy %></p>
	<p>Продажа: <%= @sell %></p>
	<p>Обновлено: <%= @updated %></p>

2.

Discussion

Enter your comment. Wiki syntax is allowed:
J X N​ V S
 
rubyonrails/торговыи-бот-btc-e.txt · Last modified: 2015/04/09 14:08 (external edit)