mbtc 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +53 -0
- data/Rakefile +1 -0
- data/bin/mbtc +64 -0
- data/lib/mbtc/api.rb +60 -0
- data/lib/mbtc/orderbook.rb +39 -0
- data/lib/mbtc/ticker.rb +29 -0
- data/lib/mbtc/trade.rb +23 -0
- data/lib/mbtc/version.rb +3 -0
- data/lib/mbtc.rb +51 -0
- data/mbtc.gemspec +26 -0
- metadata +115 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3f9630d945ddccd2c485443c6eaa0e4a84ea18ef
|
4
|
+
data.tar.gz: a5edd9e9e44ff352e659561adea98876d4c314b0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6d74dde7224e302fe678f68537b35ad3ec1ae3918812f77d68f3d67efeee13e4f7761efda4fe89aab532916b34e9485fe91e3439227f4d3b0a65b6551c6fc8b1
|
7
|
+
data.tar.gz: 27d81a87d930a3e074d675a76a334c0aefe9354af46f2082223a62e28358ad7a313b8ec5019765bc63155a47f3ef0017481d8ee12d44b6c5ecceff5b4fed60e1
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013 Marcos Trovilho
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
6
|
+
this software and associated documentation files (the "Software"), to deal in
|
7
|
+
the Software without restriction, including without limitation the rights to
|
8
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
9
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
10
|
+
subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
17
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
18
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
19
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
20
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
mbtc
|
2
|
+
====
|
3
|
+
|
4
|
+
CLI para [Mercado Bitcoin](http://www.mercadobitcoin.com.br/)
|
5
|
+
|
6
|
+
|
7
|
+
Instalação
|
8
|
+
----------
|
9
|
+
|
10
|
+
Adicione essa linha no Gemfile:
|
11
|
+
|
12
|
+
gem 'mbtc'
|
13
|
+
|
14
|
+
Execute:
|
15
|
+
|
16
|
+
$ bundle
|
17
|
+
|
18
|
+
Ou instale você mesmo:
|
19
|
+
|
20
|
+
$ gem install mbtc
|
21
|
+
|
22
|
+
|
23
|
+
Uso
|
24
|
+
---
|
25
|
+
|
26
|
+
mercado = MBTC.Mercado.new( < :btc ou :ltc > ) # o padrão é :btc
|
27
|
+
|
28
|
+
# Ticker:
|
29
|
+
ticker = mercado.ticker
|
30
|
+
|
31
|
+
# Orderbook:
|
32
|
+
orderbook = mercado.orderbook
|
33
|
+
|
34
|
+
# Trades:
|
35
|
+
trades = mercado.trades
|
36
|
+
|
37
|
+
|
38
|
+
CLI
|
39
|
+
---
|
40
|
+
|
41
|
+
$ mbtc [opções] [comando]
|
42
|
+
|
43
|
+
Opções:
|
44
|
+
-h, --help Mostra ajuda
|
45
|
+
--version Mostra versão
|
46
|
+
--log-level LEVEL Define o log level
|
47
|
+
(debug|info|warn|error|fatal)
|
48
|
+
(Padrão: info)
|
49
|
+
-t, --type TYPE Tipo do request (btc ou ltc)
|
50
|
+
(Padrão: btc)
|
51
|
+
|
52
|
+
Comandos:
|
53
|
+
ticker
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/bin/mbtc
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'methadone'
|
3
|
+
require 'mbtc'
|
4
|
+
|
5
|
+
include Methadone::Main
|
6
|
+
include Methadone::CLILogging
|
7
|
+
|
8
|
+
def print_ticker( ticker, type )
|
9
|
+
logger.info( "===== Ticker #{type.upcase} =====" )
|
10
|
+
logger.info( "Última:\t#{ticker.last}" )
|
11
|
+
logger.info( "Compra:\t#{ticker.buy}" )
|
12
|
+
logger.info( "Venda:\t#{ticker.sell}" )
|
13
|
+
logger.info( "Maior:\t#{ticker.high}" )
|
14
|
+
logger.info( "Menor:\t#{ticker.low}" )
|
15
|
+
logger.info( "Volume:\t#{ticker.vol}" )
|
16
|
+
logger.info( "Data:\t#{Time.at( ticker.date ).utc}" )
|
17
|
+
end
|
18
|
+
|
19
|
+
def print_orderbook( orderbook, type )
|
20
|
+
logger.info( "===== Order Book #{type.upcase} =====" )
|
21
|
+
# TODO: implement
|
22
|
+
end
|
23
|
+
|
24
|
+
def print_trades( trades, type )
|
25
|
+
logger.info( "===== Trades #{type.upcase} =====" )
|
26
|
+
# TODO: implement
|
27
|
+
end
|
28
|
+
|
29
|
+
main do |command|
|
30
|
+
logger.debug( "command: #{command.inspect}" )
|
31
|
+
logger.debug( "options: #{options.inspect}" )
|
32
|
+
|
33
|
+
request_type = options[:type]
|
34
|
+
logger.debug( "initilizing MBTC::Mercado with type: #{request_type}" )
|
35
|
+
m = MBTC::Mercado.new( request_type.to_sym )
|
36
|
+
|
37
|
+
if command.nil?
|
38
|
+
logger.debug( 'nil command, setting to ticker' )
|
39
|
+
command = 'ticker'
|
40
|
+
end
|
41
|
+
|
42
|
+
case command
|
43
|
+
when 'ticker', 't'
|
44
|
+
logger.debug( 'executing ticker' )
|
45
|
+
print_ticker( m.ticker, request_type )
|
46
|
+
when 'orderbook', 'ob', 'o'
|
47
|
+
logger.error( 'not implemented' )
|
48
|
+
# logger.debug( 'executing orderbook' )
|
49
|
+
# print_orderbook( m.orderbook, request_type )
|
50
|
+
when 'trades'
|
51
|
+
logger.error( 'not implemented' )
|
52
|
+
# logger.debug( 'executing trades' )
|
53
|
+
# print_trades( m.trades, request_type )
|
54
|
+
else
|
55
|
+
help_now!( 'invalid command' )
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
version MBTC::VERSION
|
60
|
+
description 'Mercado Bitcoin CLI'
|
61
|
+
use_log_level_option
|
62
|
+
options['type'] = 'btc'
|
63
|
+
on( '-t TYPE', '--type', 'Request type (btc ou ltc)' )
|
64
|
+
go!
|
data/lib/mbtc/api.rb
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module MBTC
|
4
|
+
class API
|
5
|
+
include HTTParty
|
6
|
+
base_uri 'https://www.mercadobitcoin.com.br/api'
|
7
|
+
|
8
|
+
##
|
9
|
+
# GET Ticker request
|
10
|
+
#
|
11
|
+
# @param type [Symbol] Tipo de request `:btc` ou `:ltc`
|
12
|
+
# @return [HTTParty::Response] Retorna o ticker de preço
|
13
|
+
#
|
14
|
+
def self.ticker( type = :btc )
|
15
|
+
case type
|
16
|
+
when :btc
|
17
|
+
endpoint = '/ticker/'
|
18
|
+
when :ltc
|
19
|
+
endpoint = '/ticker_litecoin/'
|
20
|
+
end
|
21
|
+
|
22
|
+
get( endpoint )
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# GET Orderbook request
|
27
|
+
#
|
28
|
+
# @param type [Symbol] Tipo de request `:btc` ou `:ltc`
|
29
|
+
# @return [HTTParty::Response] Retorna as ofertas de compra e venda
|
30
|
+
#
|
31
|
+
def self.orderbook( type = :btc )
|
32
|
+
case type
|
33
|
+
when :btc
|
34
|
+
endpoint = '/orderbook/'
|
35
|
+
when :ltc
|
36
|
+
endpoint = '/orderbook_litecoin/'
|
37
|
+
end
|
38
|
+
|
39
|
+
get( endpoint )
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# GET Trades request
|
44
|
+
#
|
45
|
+
# @param type [Symbol] Tipo de request `:btc` ou `:ltc`
|
46
|
+
# @return [HTTParty::Response] Retorna as negociações ou operações realizadas
|
47
|
+
#
|
48
|
+
def self.trades( type = :btc )
|
49
|
+
case type
|
50
|
+
when :btc
|
51
|
+
endpoint = '/trades/'
|
52
|
+
when :ltc
|
53
|
+
endpoint = '/trades_litecoin/'
|
54
|
+
end
|
55
|
+
|
56
|
+
get( endpoint )
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module MBTC
|
2
|
+
##
|
3
|
+
# Order
|
4
|
+
#
|
5
|
+
# price: preço unitário em Reais
|
6
|
+
# volume: volume disponível
|
7
|
+
#
|
8
|
+
class Order
|
9
|
+
attr_reader :price
|
10
|
+
attr_reader :volume
|
11
|
+
|
12
|
+
def initialize( price, volume )
|
13
|
+
@price = price
|
14
|
+
@volume = volume
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Orderbook
|
20
|
+
#
|
21
|
+
# asks [Array<Order>] lista das ofertas de venda disponíveis.
|
22
|
+
# bids [Array<Order>] lista das ofertas de compra disponíveis.
|
23
|
+
#
|
24
|
+
class Orderbook
|
25
|
+
attr_reader :asks
|
26
|
+
attr_reader :bids
|
27
|
+
|
28
|
+
def initialize( params )
|
29
|
+
@asks = params["asks"].collect do |ask|
|
30
|
+
Order.new( ask[0], ask[1] )
|
31
|
+
end
|
32
|
+
|
33
|
+
@bids = params["bids"].collect do |bid|
|
34
|
+
Order.new( bid[0], bid[1] )
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/lib/mbtc/ticker.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module MBTC
|
2
|
+
##
|
3
|
+
# Ticker
|
4
|
+
#
|
5
|
+
# high: maior valor em Reais de negociação do dia.
|
6
|
+
# low: menor valor em Reais de negociação do dia.
|
7
|
+
# vol: volume de Bitcoin ou Litecoin negociado no dia.
|
8
|
+
# last: último valor em Reais negociado.
|
9
|
+
# buy: valor atual em Reais ofertado para compra.
|
10
|
+
# sell: valor atual em Reais ofertado para venda.
|
11
|
+
# date: timestamp da última atualização do ticker.
|
12
|
+
#
|
13
|
+
class Ticker
|
14
|
+
attr_reader :high
|
15
|
+
attr_reader :low
|
16
|
+
attr_reader :vol
|
17
|
+
attr_reader :last
|
18
|
+
attr_reader :buy
|
19
|
+
attr_reader :sell
|
20
|
+
attr_reader :date
|
21
|
+
|
22
|
+
def initialize( params = {} )
|
23
|
+
params.each do |k,v|
|
24
|
+
self.instance_variable_set( "@#{k}", v )
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
data/lib/mbtc/trade.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module MBTC
|
2
|
+
##
|
3
|
+
# Trade
|
4
|
+
#
|
5
|
+
# date: timestamp da operação.
|
6
|
+
# price: preço unitário em Reais da operação.
|
7
|
+
# amount: volume de Litecoin ou Bitcoin da operação.
|
8
|
+
# tid: ID da operação.
|
9
|
+
#
|
10
|
+
class Trade
|
11
|
+
attr_reader :date
|
12
|
+
attr_reader :price
|
13
|
+
attr_reader :amount
|
14
|
+
attr_reader :tid
|
15
|
+
|
16
|
+
def initialize( params = {} )
|
17
|
+
params.each do |k,v|
|
18
|
+
self.instance_variable_set( "@#{k}", v )
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
data/lib/mbtc/version.rb
ADDED
data/lib/mbtc.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'mbtc/version'
|
2
|
+
require 'mbtc/api'
|
3
|
+
require 'mbtc/ticker'
|
4
|
+
require 'mbtc/orderbook'
|
5
|
+
require 'mbtc/trade'
|
6
|
+
|
7
|
+
module MBTC
|
8
|
+
class Mercado
|
9
|
+
|
10
|
+
# @param type [Symbol] Tipo de request (:btc ou :ltc)
|
11
|
+
def initialize( type = :btc )
|
12
|
+
@type = type
|
13
|
+
end
|
14
|
+
|
15
|
+
##
|
16
|
+
# Ticker
|
17
|
+
#
|
18
|
+
# @return [Ticker] Retorna o ticker de preço
|
19
|
+
#
|
20
|
+
def ticker
|
21
|
+
ticker_json = API.ticker( @type ).parsed_response
|
22
|
+
response = JSON.parse( ticker_json )
|
23
|
+
Ticker.new( response["ticker"] )
|
24
|
+
end
|
25
|
+
|
26
|
+
##
|
27
|
+
# Orderbook
|
28
|
+
#
|
29
|
+
# @return [Orderbook] Retorna as ofertas de compra e venda
|
30
|
+
#
|
31
|
+
def orderbook
|
32
|
+
orderbook_json = API.orderbook( @type ).parsed_response
|
33
|
+
response = JSON.parse( orderbook_json )
|
34
|
+
Orderbook.new( response )
|
35
|
+
end
|
36
|
+
|
37
|
+
##
|
38
|
+
# Trades
|
39
|
+
#
|
40
|
+
# @return [Array] Retorna as negociações ou operações realizadas
|
41
|
+
#
|
42
|
+
def trades
|
43
|
+
trades_json = API.trades( @type ).parsed_response
|
44
|
+
response = JSON.parse( trades_json )
|
45
|
+
response.collect do |trade|
|
46
|
+
Trade.new( trade )
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
data/mbtc.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'mbtc/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'mbtc'
|
8
|
+
spec.version = MBTC::VERSION
|
9
|
+
spec.authors = ['Marcos Trovilho']
|
10
|
+
spec.email = ['marcos@trovilho.com']
|
11
|
+
spec.description = %q{CLI para Mercado Bitcoin}
|
12
|
+
spec.summary = %q{CLI para Mercado Bitcoin}
|
13
|
+
spec.homepage = 'https://github.com/mtrovilho/mbtc.git'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'methadone', '~> 1.3.1'
|
22
|
+
spec.add_dependency 'httparty', '~> 0.12.0'
|
23
|
+
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.3.5'
|
25
|
+
spec.add_development_dependency 'rake', '~> 10.1.1'
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mbtc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Marcos Trovilho
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-12-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: methadone
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.3.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.3.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httparty
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.12.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.12.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.3.5
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.3.5
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 10.1.1
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 10.1.1
|
69
|
+
description: CLI para Mercado Bitcoin
|
70
|
+
email:
|
71
|
+
- marcos@trovilho.com
|
72
|
+
executables:
|
73
|
+
- mbtc
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- .gitignore
|
78
|
+
- Gemfile
|
79
|
+
- LICENSE
|
80
|
+
- README.md
|
81
|
+
- Rakefile
|
82
|
+
- bin/mbtc
|
83
|
+
- lib/mbtc.rb
|
84
|
+
- lib/mbtc/api.rb
|
85
|
+
- lib/mbtc/orderbook.rb
|
86
|
+
- lib/mbtc/ticker.rb
|
87
|
+
- lib/mbtc/trade.rb
|
88
|
+
- lib/mbtc/version.rb
|
89
|
+
- mbtc.gemspec
|
90
|
+
homepage: https://github.com/mtrovilho/mbtc.git
|
91
|
+
licenses:
|
92
|
+
- MIT
|
93
|
+
metadata: {}
|
94
|
+
post_install_message:
|
95
|
+
rdoc_options: []
|
96
|
+
require_paths:
|
97
|
+
- lib
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
|
+
requirements:
|
105
|
+
- - '>='
|
106
|
+
- !ruby/object:Gem::Version
|
107
|
+
version: '0'
|
108
|
+
requirements: []
|
109
|
+
rubyforge_project:
|
110
|
+
rubygems_version: 2.1.11
|
111
|
+
signing_key:
|
112
|
+
specification_version: 4
|
113
|
+
summary: CLI para Mercado Bitcoin
|
114
|
+
test_files: []
|
115
|
+
has_rdoc:
|