betfair 0.0.14 → 0.0.16
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/lib/betfair/api.rb +63 -4
- data/lib/betfair/version.rb +1 -1
- data/spec/betfair/api_spec.rb +57 -2
- data/spec/fixtures/get_account_funds/success.xml +1 -2
- data/spec/fixtures/get_mu_bets/fail.xml +19 -0
- data/spec/fixtures/get_mu_bets/success.xml +54 -0
- metadata +17 -12
data/.gitignore
CHANGED
data/lib/betfair/api.rb
CHANGED
@@ -2,7 +2,6 @@ module Betfair
|
|
2
2
|
|
3
3
|
class API
|
4
4
|
|
5
|
-
|
6
5
|
## Some handy constants...
|
7
6
|
|
8
7
|
EXCHANGE_IDS = {
|
@@ -19,10 +18,10 @@ module Betfair
|
|
19
18
|
## API METHODS
|
20
19
|
#
|
21
20
|
|
22
|
-
def place_bet(session_token, exchange_id, market_id,
|
21
|
+
def place_bet(session_token, exchange_id, market_id, selection_id, bet_type, price, size)
|
23
22
|
bf_bet = {
|
24
23
|
:marketId => market_id,
|
25
|
-
:selectionId =>
|
24
|
+
:selectionId => selection_id,
|
26
25
|
:betType => bet_type,
|
27
26
|
:price => price,
|
28
27
|
:size => size,
|
@@ -41,7 +40,33 @@ module Betfair
|
|
41
40
|
return response.maybe_result( :bet_results, :place_bets_result )
|
42
41
|
end
|
43
42
|
|
43
|
+
|
44
|
+
def place_multiple_bets(session_token, exchange_id, bets)
|
45
|
+
bf_bet = []
|
46
|
+
bets.each do |bet|
|
47
|
+
bf_bet << {
|
48
|
+
:marketId => bet[:market_id],
|
49
|
+
:selectionId => bet[:runner_id],
|
50
|
+
:betType => bet[:bet_type],
|
51
|
+
:price => bet[:price],
|
52
|
+
:size => bet[:size],
|
53
|
+
:asianLineId => bet[:asian_line_id],
|
54
|
+
:betCategoryType => bet[:bet_category_type],
|
55
|
+
:betPersistenceType => bet[:bet_peristence_type],
|
56
|
+
:bspLiability => bet[:bsp_liability]
|
57
|
+
}
|
58
|
+
end
|
44
59
|
|
60
|
+
response = exchange(exchange_id).
|
61
|
+
session_request( session_token,
|
62
|
+
:placeBets,
|
63
|
+
:place_bets_response,
|
64
|
+
:bets => { 'PlaceBets' => bf_bet } )
|
65
|
+
|
66
|
+
return response.maybe_result( :bet_results, :place_bets_result )
|
67
|
+
end
|
68
|
+
|
69
|
+
|
45
70
|
def cancel_bet(session_token, exchange_id, bet_id)
|
46
71
|
bf_bet = { :betId => bet_id }
|
47
72
|
|
@@ -53,7 +78,21 @@ module Betfair
|
|
53
78
|
|
54
79
|
return response.maybe_result( :bet_results, :cancel_bets_result )
|
55
80
|
end
|
81
|
+
|
82
|
+
|
83
|
+
def cancel_multiple_bets(session_token, exchange_id, bets)
|
84
|
+
bf_bet = []
|
85
|
+
bets.each { |bet_id| bf_bet << { :betId => bet_id } }
|
56
86
|
|
87
|
+
response = exchange(exchange_id).
|
88
|
+
session_request( session_token,
|
89
|
+
:cancelBets,
|
90
|
+
:cancel_bets_response,
|
91
|
+
:bets => { 'CancelBets' => bf_bet } ) # "CancelBets" has to be a string, not a symbol!
|
92
|
+
|
93
|
+
return response.maybe_result( :bet_results, :cancel_bets_result )
|
94
|
+
end
|
95
|
+
|
57
96
|
|
58
97
|
def get_market(session_token, exchange_id, market_id, locale = nil)
|
59
98
|
response = exchange(exchange_id).
|
@@ -113,6 +152,26 @@ module Betfair
|
|
113
152
|
|
114
153
|
return response.maybe_result
|
115
154
|
end
|
155
|
+
|
156
|
+
|
157
|
+
def get_mu_bets( session_token, exchange_id, market_id = 0, bet_status = 'MU', start_record = 0, record_count = 200, sort_order = 'ASC', order_by = 'PLACED_DATE') #, bet_ids = nil, , exclude_last_second = nil, matched_since = nil
|
158
|
+
response = exchange( exchange_id ).
|
159
|
+
session_request( session_token,
|
160
|
+
:getMUBets,
|
161
|
+
:get_mu_bets_response,
|
162
|
+
#:betIds => bet_ids,
|
163
|
+
:betStatus => bet_status,
|
164
|
+
#:excludeLastSecond => exclude_last_second,
|
165
|
+
:marketId => market_id,
|
166
|
+
#:matchedSince => matched_since,
|
167
|
+
:orderBy => order_by,
|
168
|
+
:recordCount => record_count,
|
169
|
+
:sortOrder => sort_order,
|
170
|
+
:startRecord => start_record
|
171
|
+
)
|
172
|
+
|
173
|
+
return response.maybe_result( :bets, :mu_bet )
|
174
|
+
end
|
116
175
|
|
117
176
|
|
118
177
|
def login(username, password, product_id, vendor_software_id, location_id, ip_address)
|
@@ -424,4 +483,4 @@ module Betfair
|
|
424
483
|
|
425
484
|
end
|
426
485
|
|
427
|
-
end
|
486
|
+
end
|
data/lib/betfair/version.rb
CHANGED
data/spec/betfair/api_spec.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'tempfile'
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
|
5
4
|
module Betfair
|
6
5
|
|
7
6
|
describe "Helper methods for mashing the data from the API" do
|
@@ -78,7 +77,29 @@ module Betfair
|
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
81
|
-
describe "
|
80
|
+
describe "place multiple bets success"do
|
81
|
+
it "should place mutliple bets on the exchange via the api" do
|
82
|
+
savon.expects(:place_bets).returns(:success)
|
83
|
+
bets = []
|
84
|
+
bets << { market_id: 104184109, runner_id: 58805, bet_type: 'B', price: 2.0, size: 2.0, asian_line_id: 0,
|
85
|
+
bet_category_type: 'E', bet_peristence_type: 'NONE', bsp_liability: 0 }
|
86
|
+
bets = @bf.place_multiple_bets(@session_token, 1, bets)
|
87
|
+
bets.should_not be_nil
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "place multiple bets fail" do
|
92
|
+
it "should return an error message" do
|
93
|
+
savon.expects(:place_bets).returns(:fail)
|
94
|
+
bets = []
|
95
|
+
bets << { market_id: 104184109, runner_id: 58805, bet_type: 'B', price: 2.0, size: 2.0, asian_line_id: 0,
|
96
|
+
bet_category_type: 'E', bet_peristence_type: 'NONE', bsp_liability: 0 }
|
97
|
+
error_code = @bf.place_multiple_bets(@session_token, 1, bets)
|
98
|
+
error_code[:result_code].should eq('INVALID_SIZE')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "cancel bet success" do
|
82
103
|
it "should cancel a bet on the exchange via the api" do
|
83
104
|
savon.expects(:cancel_bets).returns(:success)
|
84
105
|
bet = @bf.cancel_bet(@session_token, 3, 16939689578)
|
@@ -94,6 +115,22 @@ module Betfair
|
|
94
115
|
end
|
95
116
|
end
|
96
117
|
|
118
|
+
describe "cancel multiple bets success" do
|
119
|
+
it "should cancel a bet on the exchange via the api" do
|
120
|
+
savon.expects(:cancel_bets).returns(:success)
|
121
|
+
bets = @bf.cancel_multiple_bets(@session_token, 3, [16939689578, 16939689579, 169396895710])
|
122
|
+
bets.should_not be_nil
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
describe "cancel bet fail" do
|
127
|
+
it "should fail to cancel mulitple bets on the exchange via the api" do
|
128
|
+
savon.expects(:cancel_bets).returns(:fail)
|
129
|
+
error_code = @bf.cancel_multiple_bets(@session_token, 3, [16939689578, 16939689579, 169396895710])
|
130
|
+
error_code.should eq('API_ERROR - NO_SESSION')
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
97
134
|
end
|
98
135
|
|
99
136
|
|
@@ -175,6 +212,24 @@ module Betfair
|
|
175
212
|
events.should_not be_nil
|
176
213
|
end
|
177
214
|
end
|
215
|
+
|
216
|
+
describe "get matched/unmatched bets success" do
|
217
|
+
it "should return all of our unmatched and matched bets on an exchange, can take a market_id as the third arguement, plus many more" do
|
218
|
+
savon.expects(:getMUBets).returns(:success)
|
219
|
+
bets = @bf.get_mu_bets(@session_token, 1)
|
220
|
+
#bets.length.should eq(2)
|
221
|
+
bets[0][:selection_id].should eq("5986909")
|
222
|
+
bets[1][:selection_id].should eq("6230544")
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
describe "get matched/unmatched bets" do
|
227
|
+
it "should return an error message given the exchange id and and array of market type ids and no session id" do
|
228
|
+
savon.expects(:getMUBets).returns(:fail)
|
229
|
+
error_code = @bf.get_mu_bets(@session_token, 1)
|
230
|
+
error_code.should eq('API_ERROR - NO_SESSION')
|
231
|
+
end
|
232
|
+
end
|
178
233
|
|
179
234
|
end
|
180
235
|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3
|
-
xmlns:n2="http://www.betfair.com/publicapi/types/exchange/v5/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:n2="http://www.betfair.com/publicapi/types/exchange/v5/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
4
3
|
<soap:Body>
|
5
4
|
<n:getAccountFundsResponse xmlns:n="http://www.betfair.com/publicapi/v5/BFExchangeService/">
|
6
5
|
<n:Result xsi:type="n2:GetAccountFundsResp">
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:n2="http://www.betfair.com/publicapi/types/exchange/v5/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
3
|
+
<soap:Body>
|
4
|
+
<n:getMUBetsResponse xmlns:n="http://www.betfair.com/publicapi/v5/BFExchangeService/">
|
5
|
+
<n:Result xsi:type="n2:GetMUBetsResp">
|
6
|
+
<header xsi:type="n2:APIResponseHeader">
|
7
|
+
<errorCode xsi:type="n2:APIErrorEnum">NO_SESSION</errorCode>
|
8
|
+
<minorErrorCode xsi:nil="1"></minorErrorCode>
|
9
|
+
<sessionToken xsi:nil="1"></sessionToken>
|
10
|
+
<timestamp xsi:type="xsd:dateTime">2012-03-11T05:33:20.615Z</timestamp>
|
11
|
+
</header>
|
12
|
+
<bets xsi:nil="1"></bets>
|
13
|
+
<errorCode xsi:type="n2:GetMUBetsErrorEnum">API_ERROR</errorCode>
|
14
|
+
<minorErrorCode xsi:nil="1"></minorErrorCode>
|
15
|
+
<totalRecordCount xsi:type="xsd:int">0</totalRecordCount>
|
16
|
+
</n:Result>
|
17
|
+
</n:getMUBetsResponse>
|
18
|
+
</soap:Body>
|
19
|
+
</soap:Envelope>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:n2="http://www.betfair.com/publicapi/types/exchange/v5/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
3
|
+
<soap:Body>
|
4
|
+
<n:getMUBetsResponse xmlns:n="http://www.betfair.com/publicapi/v5/BFExchangeService/">
|
5
|
+
<n:Result xsi:type="n2:GetMUBetsResp">
|
6
|
+
<header xsi:type="n2:APIResponseHeader">
|
7
|
+
<errorCode xsi:type="n2:APIErrorEnum">OK</errorCode>
|
8
|
+
<minorErrorCode xsi:nil="1"></minorErrorCode>
|
9
|
+
<sessionToken xsi:type="xsd:string">tK5bi3RcJxzC7mtX6dIjCaaIe/DOvKzcX4GK8RQ7RGo=</sessionToken>
|
10
|
+
<timestamp xsi:type="xsd:dateTime">2012-03-11T05:35:21.219Z</timestamp>
|
11
|
+
</header>
|
12
|
+
<bets xsi:type="n2:ArrayOfMUBet">
|
13
|
+
<n2:MUBet xsi:type="n2:MUBet">
|
14
|
+
<asianLineId xsi:type="xsd:int">0</asianLineId>
|
15
|
+
<betId xsi:type="xsd:long">1828957078</betId>
|
16
|
+
<transactionId xsi:type="xsd:long">2433120449</transactionId>
|
17
|
+
<betStatus xsi:type="n2:BetStatusEnum">U</betStatus>
|
18
|
+
<betType xsi:type="n2:BetTypeEnum">L</betType>
|
19
|
+
<betCategoryType xsi:type="n2:BetCategoryTypeEnum">E</betCategoryType>
|
20
|
+
<betPersistenceType xsi:type="n2:BetPersistenceTypeEnum">NONE</betPersistenceType>
|
21
|
+
<marketId xsi:type="xsd:int">100470197</marketId>
|
22
|
+
<matchedDate xsi:type="xsd:dateTime">0001-01-01T00:00:00.000Z</matchedDate>
|
23
|
+
<size xsi:type="xsd:double">5.0</size>
|
24
|
+
<bspLiability xsi:type="xsd:double">0.0</bspLiability>
|
25
|
+
<placedDate xsi:type="xsd:dateTime">2012-03-11T05:28:37.000Z</placedDate>
|
26
|
+
<price xsi:type="xsd:double">1.89</price>
|
27
|
+
<selectionId xsi:type="xsd:int">5986909</selectionId>
|
28
|
+
<handicap xsi:type="xsd:double">0.0</handicap>
|
29
|
+
</n2:MUBet>
|
30
|
+
<n2:MUBet xsi:type="n2:MUBet">
|
31
|
+
<asianLineId xsi:type="xsd:int">0</asianLineId>
|
32
|
+
<betId xsi:type="xsd:long">1828957079</betId>
|
33
|
+
<transactionId xsi:type="xsd:long">2433120450</transactionId>
|
34
|
+
<betStatus xsi:type="n2:BetStatusEnum">U</betStatus>
|
35
|
+
<betType xsi:type="n2:BetTypeEnum">L</betType>
|
36
|
+
<betCategoryType xsi:type="n2:BetCategoryTypeEnum">E</betCategoryType>
|
37
|
+
<betPersistenceType xsi:type="n2:BetPersistenceTypeEnum">NONE</betPersistenceType>
|
38
|
+
<marketId xsi:type="xsd:int">100470197</marketId>
|
39
|
+
<matchedDate xsi:type="xsd:dateTime">0001-01-01T00:00:00.000Z</matchedDate>
|
40
|
+
<size xsi:type="xsd:double">5.0</size>
|
41
|
+
<bspLiability xsi:type="xsd:double">0.0</bspLiability>
|
42
|
+
<placedDate xsi:type="xsd:dateTime">2012-03-11T05:28:37.000Z</placedDate>
|
43
|
+
<price xsi:type="xsd:double">1.48</price>
|
44
|
+
<selectionId xsi:type="xsd:int">6230544</selectionId>
|
45
|
+
<handicap xsi:type="xsd:double">0.0</handicap>
|
46
|
+
</n2:MUBet>
|
47
|
+
</bets>
|
48
|
+
<errorCode xsi:type="n2:GetMUBetsErrorEnum">OK</errorCode>
|
49
|
+
<minorErrorCode xsi:nil="1"></minorErrorCode>
|
50
|
+
<totalRecordCount xsi:type="xsd:int">2</totalRecordCount>
|
51
|
+
</n:Result>
|
52
|
+
</n:getMUBetsResponse>
|
53
|
+
</soap:Body>
|
54
|
+
</soap:Envelope>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: betfair
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-13 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: savon
|
16
|
-
requirement: &
|
16
|
+
requirement: &70157897063020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70157897063020
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70157897062340 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70157897062340
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &70157897061740 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70157897061740
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: savon_spec
|
49
|
-
requirement: &
|
49
|
+
requirement: &70157897061180 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70157897061180
|
58
58
|
description: Gem for accessing the Betfair API.
|
59
59
|
email:
|
60
60
|
- lukeb@lukebyrne.com
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- README
|
69
69
|
- Rakefile
|
70
70
|
- betfair.gemspec
|
71
|
+
- examples/doh.log
|
71
72
|
- examples/foo.rb
|
72
73
|
- lib/betfair.rb
|
73
74
|
- lib/betfair/api.rb
|
@@ -83,6 +84,8 @@ files:
|
|
83
84
|
- spec/fixtures/get_market/success.xml
|
84
85
|
- spec/fixtures/get_market_prices_compressed/fail.xml
|
85
86
|
- spec/fixtures/get_market_prices_compressed/success.xml
|
87
|
+
- spec/fixtures/get_mu_bets/fail.xml
|
88
|
+
- spec/fixtures/get_mu_bets/success.xml
|
86
89
|
- spec/fixtures/login/fail.xml
|
87
90
|
- spec/fixtures/login/success.xml
|
88
91
|
- spec/fixtures/place_bets/fail.xml
|
@@ -102,7 +105,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
105
|
version: '0'
|
103
106
|
segments:
|
104
107
|
- 0
|
105
|
-
hash:
|
108
|
+
hash: 1829796573211684180
|
106
109
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
110
|
none: false
|
108
111
|
requirements:
|
@@ -111,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
114
|
version: '0'
|
112
115
|
segments:
|
113
116
|
- 0
|
114
|
-
hash:
|
117
|
+
hash: 1829796573211684180
|
115
118
|
requirements: []
|
116
119
|
rubyforge_project: betfair
|
117
120
|
rubygems_version: 1.8.10
|
@@ -130,6 +133,8 @@ test_files:
|
|
130
133
|
- spec/fixtures/get_market/success.xml
|
131
134
|
- spec/fixtures/get_market_prices_compressed/fail.xml
|
132
135
|
- spec/fixtures/get_market_prices_compressed/success.xml
|
136
|
+
- spec/fixtures/get_mu_bets/fail.xml
|
137
|
+
- spec/fixtures/get_mu_bets/success.xml
|
133
138
|
- spec/fixtures/login/fail.xml
|
134
139
|
- spec/fixtures/login/success.xml
|
135
140
|
- spec/fixtures/place_bets/fail.xml
|