betfair 1.0.3 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,11 +1,12 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  gem 'rake'
4
- gem 'savon'
4
+ gem 'savon', '<= 0.8.6'
5
5
  gem 'gemcutter'
6
6
 
7
7
  gem 'rspec'
8
- gem 'savon_spec'
8
+ gem 'savon_spec', '= 0.1.5'
9
+ gem 'mocha', '=0.10.4'
9
10
 
10
11
  gemspec
11
12
 
data/README.md CHANGED
@@ -161,9 +161,9 @@ The API PlaceBets service allows you to place multiple (1 to 60) bets on a singl
161
161
 
162
162
  exchange_id = 1
163
163
  bets = []
164
- bets << { market_id: 12345, runner_id: 58805, bet_type: 'B', price: 2.0, size: 2.0, asian_line_id: 0,
164
+ bets << { market_id: 12345, selection_id: 58805, bet_type: 'B', price: 2.0, size: 2.0, asian_line_id: 0,
165
165
  bet_category_type: 'E', bet_peristence_type: 'NONE', bsp_liability: 0 }
166
- bets << { market_id: 12345, runner_id: 1234, bet_type: 'L', price: 1.5, size: 2.0, asian_line_id: 0,
166
+ bets << { market_id: 12345, selection_id: 1234, bet_type: 'L', price: 1.5, size: 2.0, asian_line_id: 0,
167
167
  bet_category_type: 'E', bet_peristence_type: 'NONE', bsp_liability: 0 }
168
168
 
169
169
  place_multiple_bets =
@@ -238,7 +238,7 @@ foo[100388290] returns
238
238
 
239
239
  { :market_id=>100388290, :market_name=>"Premiers 2012", :market_type=>"O", :market_status=>"ACTIVE", :event_date=>2012-03-24 16:20:00 +0800,
240
240
  :menu_path=>"\\Australian Rules\\AFL 2012", :event_hierarchy=>"/61420/26759191/100388290", :bet_delay=>"0", :exchange_id=>2,
241
- :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 16:35:21 +0800, :number_of_runners=>18, :number_of_winners=>1,
241
+ :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 16:35:21 +0800, :number_of_selections=>18, :number_of_winners=>1,
242
242
  :total_amount_matched=>193599.58, :bsp_market=>false, :turning_in_play=>false
243
243
  }
244
244
 
@@ -255,7 +255,7 @@ foo.first returns
255
255
 
256
256
  { :market_id=>100388290, :market_name=>"Premiers 2012", :market_type=>"O", :market_status=>"ACTIVE", :event_date=>2012-03-24 08:20:00 UTC,
257
257
  :menu_path=>"\\Australian Rules\\AFL 2012", :event_heirachy=>"/61420/26759191/100388290", :bet_delay=>0, :exchange_id=>2,
258
- :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 09:10:12 UTC, :number_of_runners=>18, :number_of_winners=>1,
258
+ :iso3_country_code=>"AUS", :last_refresh=>2012-03-29 09:10:12 UTC, :number_of_selections=>18, :number_of_winners=>1,
259
259
  :total_amount_matched=>193657.0, :bsp_market=>false, :turning_in_play=>false
260
260
  }
261
261
 
@@ -263,7 +263,7 @@ foo.first returns
263
263
  This helper sorts out a nice hash from the
264
264
 
265
265
  market = bf.get_market(session_token, 2, 100388290)
266
- foo = helpers.market_info(details)
266
+ foo = helpers.market_info(market)
267
267
 
268
268
  Which returns
269
269
 
@@ -276,7 +276,7 @@ This helper cleans up the prices
276
276
  foo = helpers.prices(prices)
277
277
 
278
278
  ## Combine ##
279
- Use this to combine `runner_names` and prices from the #market_info and #prices helpers
279
+ Use this to combine `selection_names` and prices from the #market_info and #prices helpers
280
280
 
281
281
  market = bf.get_market(session_token, 2, 100388290)
282
282
  prices = bf.get_market_prices_compressed(session_token, 2, 100388290)
@@ -284,14 +284,14 @@ Use this to combine `runner_names` and prices from the #market_info and #prices
284
284
 
285
285
  foo.first returns
286
286
 
287
- { :runner_id=>39983, :runner_name=>"Collingwood Magpies", :market_id=>100388290, :market_type_id=>61420,
287
+ { :selection_id=>39983, :selection_name=>"Collingwood Magpies", :market_id=>100388290, :market_type_id=>61420,
288
288
  :prices_string=>"39983~0~89899.79~4.2~~~false~~~~|4.2~430.35~L~1~4.1~311.51~L~2~3.85~4.75~L~3~|4.4~155.46~B~1~4.6~230.69~B~2~5.9~100.3~B~3~",
289
- :runner_matched=>89899.79, :last_back_price=>4.2, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51,
289
+ :selection_matched=>89899.79, :last_back_price=>4.2, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51,
290
290
  :b3=>3.85, :b3_available=>4.75, :l1=>4.4, :l1_available=>155.46, :l2=>4.6, :l2_available=>230.69, :l3=>5.9, :l3_available=>100.3
291
291
  }
292
292
 
293
293
  ## Details ##
294
- Gets the `market_id`/`market_name` and the `runner_id`/`runner_name`
294
+ Gets the `market_id`/`market_name` and the `selection_id`/`selection_name`
295
295
 
296
296
  market = bf.get_market(session_token, 2, 100388290)
297
297
  foo = helpers.details(market)
@@ -299,15 +299,15 @@ Gets the `market_id`/`market_name` and the `runner_id`/`runner_name`
299
299
  Which returns
300
300
 
301
301
  { :market_id=>100388290, :market_type_id=>61420,
302
- :runners=>[{:runner_id=>39983, :runner_name=>"Collingwood Magpies"}, {:runner_id=>244664, :runner_name=>"Hawthorn Hawks"},
303
- {:runner_id=>244663, :runner_name=>"Geelong Cats"}, {:runner_id=>244689, :runner_name=>"Carlton Blues"},
304
- {:runner_id=>210344, :runner_name=>"West Coast Eagles"}, {:runner_id=>244666, :runner_name=>"Fremantle Dockers"},
305
- {:runner_id=>244688, :runner_name=>"St Kilda Saints"}, {:runner_id=>244665, :runner_name=>"Sydney Swans"},
306
- {:runner_id=>173363, :runner_name=>"Adelaide Crows"}, {:runner_id=>210343, :runner_name=>"Essendon Bombers"},
307
- {:runner_id=>39986, :runner_name=>"Western Bulldogs"}, {:runner_id=>244667, :runner_name=>"Richmond Tigers"},
308
- {:runner_id=>2013991, :runner_name=>"North Melbourne Kangaroos"}, {:runner_id=>39987, :runner_name=>"Melbourne Demons"},
309
- {:runner_id=>39984, :runner_name=>"Brisbane Lions"}, {:runner_id=>217710, :runner_name=>"Port Adelaide Power"},
310
- {:runner_id=>4997061, :runner_name=>"Gold Coast Suns"}, {:runner_id=>5149403, :runner_name=>"Greater Western Sydney Giants"}]
302
+ :selections=>[{:selection_id=>39983, :selection_name=>"Collingwood Magpies"}, {:selection_id=>244664, :selection_name=>"Hawthorn Hawks"},
303
+ {:selection_id=>244663, :selection_name=>"Geelong Cats"}, {:selection_id=>244689, :selection_name=>"Carlton Blues"},
304
+ {:selection_id=>210344, :selection_name=>"West Coast Eagles"}, {:selection_id=>244666, :selection_name=>"Fremantle Dockers"},
305
+ {:selection_id=>244688, :selection_name=>"St Kilda Saints"}, {:selection_id=>244665, :selection_name=>"Sydney Swans"},
306
+ {:selection_id=>173363, :selection_name=>"Adelaide Crows"}, {:selection_id=>210343, :selection_name=>"Essendon Bombers"},
307
+ {:selection_id=>39986, :selection_name=>"Western Bulldogs"}, {:selection_id=>244667, :selection_name=>"Richmond Tigers"},
308
+ {:selection_id=>2013991, :selection_name=>"North Melbourne Kangaroos"}, {:selection_id=>39987, :selection_name=>"Melbourne Demons"},
309
+ {:selection_id=>39984, :selection_name=>"Brisbane Lions"}, {:selection_id=>217710, :selection_name=>"Port Adelaide Power"},
310
+ {:selection_id=>4997061, :selection_name=>"Gold Coast Suns"}, {:selection_id=>5149403, :selection_name=>"Greater Western Sydney Giants"}]
311
311
  }
312
312
 
313
313
  ## Prices Complete ##
@@ -320,7 +320,7 @@ foo.first returns
320
320
 
321
321
  [ 39983, {:selection_id=>39983, :order_index=>0, :total_amount_matched=>89899.79, :last_price_matched=>4.2, :handicap=>0.0,
322
322
  :reduction_factor=>0.0, :vacant=>false, :far_sp_price=>0.0, :near_sp_price=>0.0, :actual_sp_price=>0.0, :prices_string=>nil,
323
- :runner_matched=>0, :last_back_price=>0, :wom=>0.5516492637413943, :b1=>4.2, :b1_available=>429.06, :b2=>4.1, :b2_available=>310.58,
323
+ :selection_matched=>0, :last_back_price=>0, :wom=>0.5516492637413943, :b1=>4.2, :b1_available=>429.06, :b2=>4.1, :b2_available=>310.58,
324
324
  :b3=>3.85, :b3_available=>4.75, :l1=>4.3, :l1_available=>20.0, :l2=>4.4, :l2_available=>355.0, :l3=>4.6, :l3_available=>230.0}
325
325
  ]
326
326
 
@@ -329,7 +329,7 @@ foo.first returns
329
329
  prices = bf.get_market_prices_compressed(session_token, 2, 100388290)
330
330
  foo = helpers.price_string(prices, true)
331
331
 
332
- { :prices_string=>nil, :runner_matched=>0, :last_back_price=>0, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51, :b3=>3.85,
332
+ { :prices_string=>nil, :selection_matched=>0, :last_back_price=>0, :wom=>0.6054936499440416, :b1=>4.2, :b1_available=>430.35, :b2=>4.1, :b2_available=>311.51, :b3=>3.85,
333
333
  :b3_available=>4.75, :l1=>4.4, :l1_available=>155.46, :l2=>4.6, :l2_available=>230.69, :l3=>5.9, :l3_available=>100.3
334
334
  }
335
335
 
@@ -375,10 +375,11 @@ trying to set a threshold on when to place a bet.
375
375
  * rake
376
376
 
377
377
  ## To Do ##
378
- * Work out how to implement this https://github.com/jfairbairn/em-net-http, so that the libary uses eventmachine no blocking
378
+ * Add gzip support option
379
+ * Add em-http support as per this once this gets pulled https://github.com/rubiii/httpi/pull/40
379
380
  * The WOM of money in Helpers#price_string returns 0 if either all b1,b2,b3 or l1,l2,l3 are all 0
380
381
  * Add some error checking to the Betfair::Helper methods
381
- * Finish of the mash method, to return a nice hash of all market and runner info
382
+ * Finish of the mash method, to return a nice hash of all market and selection info
382
383
  * Write a spec for the mashed method
383
384
 
384
385
  ## Contribute ##
@@ -18,9 +18,10 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- s.add_runtime_dependency 'savon'
21
+ s.add_runtime_dependency 'savon', '<= 0.8.6'
22
22
 
23
23
  s.add_development_dependency 'rake'
24
24
  s.add_development_dependency 'rspec'
25
- s.add_development_dependency 'savon_spec'
26
- end
25
+ s.add_development_dependency 'savon_spec', '= 0.1.5'
26
+ s.add_development_dependency 'mocha', '= 0.10.4'
27
+ end
@@ -0,0 +1,3 @@
1
+ # Betfair SDK
2
+
3
+ Check it out here [RubyGems](https://github.com/lukebyrne/betfair_sdk)
@@ -4,8 +4,13 @@ module Betfair
4
4
 
5
5
  ## Some handy constants...
6
6
 
7
- EXCHANGE_IDS = { aus: 2, uk: 1 }
7
+ EXCHANGE_IDS = {
8
+ :aus => 2,
9
+ :uk => 1
10
+ }
11
+
8
12
  PRODUCT_ID_FREE = 82
13
+
9
14
  BET_TYPE_LAY = 'L'
10
15
  BET_TYPE_BACK = 'B'
11
16
 
@@ -26,70 +31,70 @@ module Betfair
26
31
  ## Bet Placement API METHODS
27
32
  #
28
33
 
29
- def place_bet(session_token, exchange_id, market_id, selection_id, bet_type, price, size)
30
- bf_bet = {
31
- marketId: market_id,
32
- selectionId: selection_id,
33
- betType: bet_type,
34
- price: price,
35
- size: size,
36
- asianLineId: 0,
37
- betCategoryType: 'E',
38
- betPersistenceType: 'NONE',
39
- bspLiability: 0
34
+ def place_bet(session_token, exchange_id, market_id, selection_id, bet_type, price, size)
35
+ bf_bet = {
36
+ :marketId => market_id,
37
+ :selectionId => selection_id,
38
+ :betType => bet_type,
39
+ :price => price,
40
+ :size => size,
41
+ :asianLineId => 0,
42
+ :betCategoryType => 'E',
43
+ :betPersistenceType => 'NONE',
44
+ :bspLiability => 0
40
45
  }
41
46
 
42
47
  response = exchange(exchange_id).
43
48
  session_request( session_token,
44
- :placeBets,
49
+ :placeBets,
45
50
  :place_bets_response,
46
- bets: { 'PlaceBets' => [bf_bet] } )
51
+ :bets => { 'PlaceBets' => [bf_bet] } )
47
52
 
48
53
  return response.maybe_result( :bet_results, :place_bets_result )
49
54
  end
50
55
 
51
56
 
52
- def place_multiple_bets(session_token, exchange_id, bets)
57
+ def place_multiple_bets(session_token, exchange_id, bets)
53
58
  bf_bets = []
54
59
  bets.each do |bet|
55
- bf_bets << {
56
- marketId: bet[:market_id],
57
- selectionId: bet[:runner_id],
58
- betType: bet[:bet_type],
59
- price: bet[:price],
60
- size: bet[:size],
61
- asianLineId: bet[:asian_line_id],
62
- betCategoryType: bet[:bet_category_type],
63
- betPersistenceType: bet[:bet_peristence_type],
64
- bspLiability: bet[:bsp_liability]
60
+ bf_bets << {
61
+ :marketId => bet[:market_id],
62
+ :selectionId => bet[:selection_id],
63
+ :betType => bet[:bet_type],
64
+ :price => bet[:price],
65
+ :size => bet[:size],
66
+ :asianLineId => bet[:asian_line_id],
67
+ :betCategoryType => bet[:bet_category_type],
68
+ :betPersistenceType => bet[:bet_peristence_type],
69
+ :bspLiability => bet[:bsp_liability]
65
70
  }
66
71
  end
67
72
 
68
73
  response = exchange(exchange_id).
69
74
  session_request( session_token,
70
- :placeBets,
75
+ :placeBets,
71
76
  :place_bets_response,
72
- bets: { 'PlaceBets' => bf_bets } )
77
+ :bets => { 'PlaceBets' => bf_bets } )
73
78
 
74
79
  return response.maybe_result( :bet_results, :place_bets_result )
75
80
  end
76
81
 
77
82
  def update_bet(session_token, exchange_id, bet_id, new_bet_persitence_type, new_price, new_size, old_bet_persitance_type, old_price, old_size)
78
- bf_bet = {
79
- betId: bet_id,
80
- newBetPersistenceType: new_bet_persitence_type,
81
- newPrice: new_price,
82
- newSize: new_size,
83
- oldBetPersistenceType: old_bet_persitance_type,
84
- oldPrice: old_price,
85
- oldSize: old_size
83
+ bf_bet = {
84
+ :betId => bet_id,
85
+ :newBetPersistenceType => new_bet_persitence_type,
86
+ :newPrice => new_price,
87
+ :newSize => new_size,
88
+ :oldBetPersistenceType => old_bet_persitance_type,
89
+ :oldPrice => old_price,
90
+ :oldSize => old_size
86
91
  }
87
92
 
88
93
  response = exchange(exchange_id).
89
94
  session_request( session_token,
90
- :updateBets,
95
+ :updateBets,
91
96
  :update_bets_response,
92
- bets: { 'UpdateBets' => [bf_bet] } )
97
+ :bets => { 'UpdateBets' => [bf_bet] } )
93
98
 
94
99
  return response.maybe_result( :bet_results, :update_bets_result )
95
100
  end
@@ -97,47 +102,47 @@ module Betfair
97
102
  def update_multiple_bets(session_token, exchange_id, bets)
98
103
  bf_bets = []
99
104
  bets.each do |bet|
100
- bf_bets << {
101
- betId: bet[:bet_id],
102
- newBetPersistenceType: bet[:new_bet_persitence_type],
103
- newPrice: bet[:new_price],
104
- newSize: bet[:new_size],
105
- oldBetPersistenceType: bet[:old_bet_persitance_type],
106
- oldPrice: bet[:old_price],
107
- oldSize: bet[:old_size]
105
+ bf_bets << {
106
+ :betId => bet[:bet_id],
107
+ :newBetPersistenceType => bet[:new_bet_persitence_type],
108
+ :newPrice => bet[:new_price],
109
+ :newSize => bet[:new_size],
110
+ :oldBetPersistenceType => bet[:old_bet_persitance_type],
111
+ :oldPrice => bet[:old_price],
112
+ :oldSize => bet[:old_size]
108
113
  }
109
114
  end
110
115
 
111
116
  response = exchange(exchange_id).
112
117
  session_request( session_token,
113
- :updateBets,
118
+ :updateBets,
114
119
  :update_bets_response,
115
- bets: { 'UpdateBets' => bf_bets } )
120
+ :bets => { 'UpdateBets' => bf_bets } )
116
121
 
117
- return response.maybe_result( :bet_results, :update_bets_result )
122
+ return response.maybe_result( :bet_results, :update_bets_result )
118
123
  end
119
124
 
120
125
  def cancel_bet(session_token, exchange_id, bet_id)
121
- bf_bet = { betId: bet_id }
126
+ bf_bet = { :betId => bet_id }
122
127
 
123
128
  response = exchange(exchange_id).
124
129
  session_request( session_token,
125
- :cancelBets,
130
+ :cancelBets,
126
131
  :cancel_bets_response,
127
- bets: { 'CancelBets' => [bf_bet] } ) # "CancelBets" has to be a string, not a symbol!
132
+ :bets => { 'CancelBets' => [bf_bet] } ) # "CancelBets" has to be a string, not a symbol!
128
133
 
129
134
  return response.maybe_result( :bet_results, :cancel_bets_result )
130
135
  end
131
136
 
132
137
  def cancel_multiple_bets(session_token, exchange_id, bets)
133
138
  bf_bets = []
134
- bets.each { |bet_id| bf_bets << { betId: bet_id } }
139
+ bets.each { |bet_id| bf_bets << { :betId => bet_id } }
135
140
 
136
141
  response = exchange(exchange_id).
137
142
  session_request( session_token,
138
- :cancelBets,
143
+ :cancelBets,
139
144
  :cancel_bets_response,
140
- bets: { 'CancelBets' => bf_bets } ) # "CancelBets" has to be a string, not a symbol!
145
+ :bets => { 'CancelBets' => bf_bets } ) # "CancelBets" has to be a string, not a symbol!
141
146
 
142
147
  return response.maybe_result( :bet_results, :cancel_bets_result )
143
148
  end
@@ -151,31 +156,31 @@ module Betfair
151
156
 
152
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
153
158
  response = exchange(exchange_id).
154
- session_request( session_token,
155
- :getMUBets,
159
+ session_request( session_token,
160
+ :getMUBets,
156
161
  :get_mu_bets_response,
157
- #betIds: bet_ids,
158
- betStatus: bet_status,
159
- #excludeLastSecond: exclude_last_second,
160
- marketId: market_id,
161
- #matchedSince: matched_since,
162
- orderBy: order_by,
163
- recordCount: record_count,
164
- sortOrder: sort_order,
165
- startRecord: start_record
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
166
171
  )
167
172
 
168
173
  return response.maybe_result( :bets, :mu_bet )
169
174
  end
170
175
 
171
176
 
172
- def get_market(session_token, exchange_id, market_id, locale = nil)
177
+ def get_market(session_token, exchange_id, market_id, locale = nil)
173
178
  response = exchange(exchange_id).
174
- session_request( session_token,
175
- :getMarket,
179
+ session_request( session_token,
180
+ :getMarket,
176
181
  :get_market_response,
177
- marketId: market_id,
178
- locale: locale )
182
+ :marketId => market_id,
183
+ :locale => locale )
179
184
 
180
185
  return response.maybe_result( :market )
181
186
  end
@@ -184,10 +189,10 @@ module Betfair
184
189
  def get_market_prices_compressed(session_token, exchange_id, market_id, currency_code = nil)
185
190
  response = exchange(exchange_id).
186
191
  session_request( session_token,
187
- :getMarketPricesCompressed,
192
+ :getMarketPricesCompressed,
188
193
  :get_market_prices_compressed_response,
189
- marketId: market_id,
190
- currencyCode: currency_code )
194
+ :marketId => market_id,
195
+ :currencyCode => currency_code )
191
196
 
192
197
  return response.maybe_result( :market_prices )
193
198
  end
@@ -196,9 +201,9 @@ module Betfair
196
201
  def get_active_event_types(session_token, locale = nil)
197
202
  response = @global_service.
198
203
  session_request( session_token,
199
- :getActiveEventTypes,
204
+ :getActiveEventTypes,
200
205
  :get_active_event_types_response,
201
- locale: locale )
206
+ :locale => locale )
202
207
 
203
208
  return response.maybe_result( :event_type_items, :event_type )
204
209
  end
@@ -206,14 +211,14 @@ module Betfair
206
211
 
207
212
  def get_all_markets(session_token, exchange_id, event_type_ids = nil, locale = nil, countries = nil, from_date = nil, to_date = nil)
208
213
  response = exchange(exchange_id).
209
- session_request( session_token,
210
- :getAllMarkets,
214
+ session_request( session_token,
215
+ :getAllMarkets,
211
216
  :get_all_markets_response,
212
- eventTypeIds: { 'int' => event_type_ids },
213
- locale: locale,
214
- countries: { 'Country' => countries },
215
- fromDate: from_date,
216
- toDate: to_date )
217
+ :eventTypeIds => { 'int' => event_type_ids },
218
+ :locale => locale,
219
+ :countries => { 'country' => countries },
220
+ :fromDate => from_date,
221
+ :toDate => to_date )
217
222
 
218
223
  return response.maybe_result( :market_data )
219
224
  end
@@ -221,22 +226,22 @@ module Betfair
221
226
 
222
227
  def get_account_funds( session_token, exchange_id )
223
228
  response = exchange(exchange_id).
224
- session_request( session_token,
225
- :getAccountFunds,
229
+ session_request( session_token,
230
+ :getAccountFunds,
226
231
  :get_account_funds_response )
227
232
 
228
233
  return response.maybe_result
229
234
  end
230
235
 
231
236
  def login(username, password, product_id, vendor_software_id, location_id, ip_address)
232
- response = @global_service.request( :login,
233
- :login_response,
234
- username: username,
235
- password: password,
236
- productId: product_id,
237
- vendorSoftwareId: vendor_software_id,
238
- locationId: location_id,
239
- ipAddress: ip_address )
237
+ response = @global_service.request( :login,
238
+ :login_response,
239
+ :username => username,
240
+ :password => password,
241
+ :productId => product_id,
242
+ :vendorSoftwareId => vendor_software_id,
243
+ :locationId => location_id,
244
+ :ipAddress => ip_address )
240
245
 
241
246
  return response.maybe_result( :header, :session_token )
242
247
  end
@@ -247,19 +252,21 @@ module Betfair
247
252
  def keep_alive(session_token)
248
253
  response = @global_service.
249
254
  session_request( session_token,
250
- :keep_alive,
255
+ :keep_alive,
251
256
  :keep_alive_response )
252
257
 
253
- # Need to do the old school way of checking as the keep_alive response doesn't return a minorErrorCode, so fails
254
- error_code = response[:header][:error_code]
255
- #return error_code == 'OK' ? response[:header][:session_token] : error_code
256
- return error_code == 'OK' ? response[:header][:session_token].extend( Success ) : error_code.extend( Failure )
258
+ # Need to do the old school way of checking as the keep_alive
259
+ # response doesn't return a minorErrorCode, so fails
260
+ error_code = response[:header][:error_code]
261
+ return error_code == 'OK' ?
262
+ response[:header][:session_token].extend( Success ) :
263
+ error_code.extend( Failure )
257
264
  end
258
265
 
259
266
  def logout(session_token)
260
267
  response = @global_service.
261
268
  session_request( session_token,
262
- :logout,
269
+ :logout,
263
270
  :logout_response )
264
271
  return response.maybe_result( :header, :session_token )
265
272
  end
@@ -268,11 +275,11 @@ module Betfair
268
275
  ## END OF API METHODS
269
276
 
270
277
 
271
- def exchange(exchange_id)
278
+ def exchange(exchange_id)
272
279
  exchange_id == EXCHANGE_IDS[:aus] ? @aus_service : @uk_service
273
280
  end
274
281
 
275
- def session_token(response_header)
282
+ def session_token(response_header)
276
283
  response_header[:error_code] == 'OK' ? response_header[:session_token] : response_header[:error_code]
277
284
  end
278
285
 
@@ -297,13 +304,13 @@ module Betfair
297
304
 
298
305
  # Handy constants
299
306
  NAMESPACES = {
300
- aus: 'http://www.betfair.com/exchange/v3/BFExchangeService/AUS',
301
- global: 'https://www.betfair.com/global/v3/BFGlobalService',
302
- uk: 'http://www.betfair.com/exchange/v3/BFExchangeService/UK' }
307
+ :aus => 'http://www.betfair.com/exchange/v3/BFExchangeService/AUS',
308
+ :global => 'https://www.betfair.com/global/v3/BFGlobalService',
309
+ :uk => 'http://www.betfair.com/exchange/v3/BFExchangeService/UK' }
303
310
  ENDPOINTS = {
304
- aus: 'https://api-au.betfair.com/exchange/v5/BFExchangeService',
305
- global: 'https://api.betfair.com/global/v3/BFGlobalService',
306
- uk: 'https://api.betfair.com/exchange/v5/BFExchangeService' }
311
+ :aus => 'https://api-au.betfair.com/exchange/v5/BFExchangeService',
312
+ :global => 'https://api.betfair.com/global/v3/BFGlobalService',
313
+ :uk => 'https://api.betfair.com/exchange/v5/BFExchangeService' }
307
314
 
308
315
 
309
316
  # Factory methods for building clients to the different endpoints
@@ -345,15 +352,15 @@ module Betfair
345
352
  # For those requests which take place in the context of a session,
346
353
  # this method constructs the correct header and delegates to #request.
347
354
  def session_request( session_token, method, result_field, body = {})
348
- header_body = { header: api_request_header(session_token) }
355
+ header_body = { :header => api_request_header(session_token) }
349
356
  full_body = header_body.merge( body )
350
357
 
351
358
  request method, result_field, full_body
352
359
  end
353
360
 
354
361
 
355
- def api_request_header(session_token)
356
- { client_stamp: 0, session_token: session_token }
362
+ def api_request_header(session_token)
363
+ { :client_stamp => 0, :session_token => session_token }
357
364
  end
358
365
  protected :api_request_header
359
366
 
@@ -366,7 +373,7 @@ module Betfair
366
373
  module ErrorPresenter
367
374
 
368
375
  def success?
369
- self[:error_code] == 'OK'
376
+ self[:error_code] == "OK"
370
377
  end
371
378
 
372
379
 
@@ -403,26 +410,26 @@ module Betfair
403
410
  markets.each do |piece|
404
411
  piece.gsub! "\0", '\:'
405
412
  foo = piece.split('~')
406
- market_hash[foo[0].to_i] = {
407
- market_id: foo[0].to_i,
408
- market_name: foo[1].to_s,
409
- market_type: foo[2].to_s,
410
- market_status: foo[3].to_s,
413
+ market_hash[foo[0].to_i] = {
414
+ :market_id => foo[0].to_i,
415
+ :market_name => foo[1].to_s,
416
+ :market_type => foo[2].to_s,
417
+ :market_status => foo[3].to_s,
411
418
  # bf returns in this case time in Epoch, but in milliseconds
412
- event_date: Time.at(foo[4].to_i/1000),
413
- menu_path: foo[5].to_s,
414
- event_hierarchy: foo[6].to_s,
415
- bet_delay: foo[7].to_s,
416
- exchange_id: foo[8].to_i,
417
- iso3_country_code: foo[9].to_s,
418
- # bf returns in this case time in Epoch, but in milliseconds
419
- last_refresh: Time.at(foo[10].to_i/1000),
420
- number_of_runners: foo[11].to_i,
421
- number_of_winners: foo[12].to_i,
422
- total_amount_matched: foo[13].to_f,
423
- bsp_market: foo[14] == 'Y' ? true : false,
424
- turning_in_play: foo[15] == 'Y' ? true : false
425
- }
419
+ :event_date => Time.at(foo[4].to_i/1000),
420
+ :menu_path => foo[5].to_s,
421
+ :event_hierarchy => foo[6].to_s,
422
+ :bet_delay => foo[7].to_s,
423
+ :exchange_id => foo[8].to_i,
424
+ :iso3_country_code => foo[9].to_s,
425
+ # bf returns in this case time in Epoch, but in milliseconds
426
+ :last_refresh => Time.at(foo[10].to_i/1000),
427
+ :number_of_selections => foo[11].to_i,
428
+ :number_of_winners => foo[12].to_i,
429
+ :total_amount_matched => foo[13].to_f,
430
+ :bsp_market => foo[14] == 'Y' ? true : false,
431
+ :turning_in_play => foo[15] == 'Y' ? true : false
432
+ }
426
433
  end
427
434
  return market_hash
428
435
  end
@@ -441,25 +448,9 @@ module Betfair
441
448
  event_date = Time.at(bar[4].to_i/1000).utc
442
449
  last_refresh = Time.at(bar[10].to_i/1000).utc
443
450
 
444
- doh = {
445
- market_id: bar[0].to_i,
446
- market_name: bar[1],
447
- market_type: bar[2],
448
- market_status: bar[3],
449
- event_date: event_date,
450
- menu_path: bar[5],
451
- event_heirachy: bar[6],
452
- bet_delay: bar[7].to_i,
453
- exchange_id: bar[8].to_i,
454
- iso3_country_code: bar[9],
455
- last_refresh: last_refresh,
456
- number_of_runners: bar[11].to_i,
457
- number_of_winners: bar[12].to_i,
458
- total_amount_matched: bar[13].to_f,
459
- bsp_market: bsp_market,
460
- turning_in_play: turning_in_play
461
- }
462
-
451
+ doh = { market_id: bar[0].to_i, market_name: bar[1], market_type: bar[2], market_status: bar[3], event_date: event_date, menu_path: bar[5], event_heirachy: bar[6],
452
+ bet_delay: bar[7].to_i, exchange_id: bar[8].to_i, iso3_country_code: bar[9], last_refresh: last_refresh, number_of_selections: bar[11].to_i, number_of_winners: bar[12].to_i,
453
+ total_amount_matched: bar[13].to_f, bsp_market: bsp_market, turning_in_play: turning_in_play }
463
454
  foo << doh if !doh[:market_name].nil?
464
455
  end
465
456
  end
@@ -467,24 +458,24 @@ module Betfair
467
458
  end
468
459
 
469
460
  def market_info(details)
470
- { exchange_id: nil,
471
- market_type_id: nil,
472
- market_matched: nil,
473
- menu_path: details[:menu_path],
474
- market_id: details[:market_id],
475
- market_name: details[:name],
476
- market_type_name: details[:menu_path].to_s.split('\\')[1]
461
+ { :exchange_id => nil,
462
+ :market_type_id => nil,
463
+ :market_matched => nil,
464
+ :menu_path => details[:menu_path],
465
+ :market_id => details[:market_id],
466
+ :market_name => details[:name],
467
+ :market_type_name => details[:menu_path].to_s.split('\\')[1]
477
468
  }
478
469
  end
479
470
 
480
471
  def details(market)
481
- runners = []
482
- market[:runners][:runner].each { |runner| runners << { runner_id: runner[:selection_id].to_i, runner_name: runner[:name] } }
483
- return { market_id: market[:market_id].to_i, market_type_id: market[:event_type_id].to_i, runners: runners }
472
+ selections = []
473
+ market[:runners][:runner].each { |selection| selections << { :selection_id => selection[:selection_id].to_i, :selection_name => selection[:name] } }
474
+ return { :market_id => market[:market_id].to_i, :market_type_id => market[:event_type_id].to_i, :selection => selections }
484
475
  end
485
476
 
486
477
  def prices(prices)
487
- price_hash = {}
478
+ price_hash = {}
488
479
  prices.gsub! '\:', "\0"
489
480
  pieces = prices.split ":"
490
481
  pieces.each do |piece|
@@ -495,24 +486,24 @@ module Betfair
495
486
  end
496
487
 
497
488
  def combine(market, prices)
498
- market = details(market)
489
+ market = details(market)
499
490
  prices = prices(prices)
500
- market[:runners].each do |runner|
501
- runner.merge!( { market_id: market[:market_id] } )
502
- runner.merge!( { market_type_id: market[:market_type_id] } )
503
- runner.merge!(price_string(prices[runner[:runner_id]]))
491
+ market[:selection].each do |selection|
492
+ selection.merge!( { :market_id => market[:market_id] } )
493
+ selection.merge!( { :market_type_id => market[:market_type_id] } )
494
+ selection.merge!(price_string(prices[selection[:selection_id]]))
504
495
  end
505
496
  end
506
497
 
507
498
  ##
508
499
  #
509
500
  # Complete representation of market price data response,
510
- # except "removed runners" which is returned as raw string.
501
+ # except "removed selection" which is returned as raw string.
511
502
  #
512
503
  ##
513
504
  def prices_complete(prices)
514
505
  aux_hash = {}
515
- price_hash = {}
506
+ price_hash = {}
516
507
 
517
508
  prices.gsub! '\:', "\0"
518
509
  pieces = prices.split ":"
@@ -521,21 +512,21 @@ module Betfair
521
512
  aux = pieces.first
522
513
  aux.gsub! "\0", '\:'
523
514
  foo = aux.split('~')
524
- aux_hash = {
525
- market_id: foo[0].to_i,
526
- currency: foo[1].to_s,
527
- market_status: foo[2].to_s,
528
- in_play_delay: foo[3].to_i,
529
- number_of_winners: foo[4].to_i,
530
- market_information: foo[5].to_s,
531
- discount_allowed: foo[6] == 'true' ? true : false,
532
- market_base_rate: foo[7].to_s,
533
- refresh_time_in_milliseconds: foo[8].to_i,
534
- removed_runners: foo[9].to_s,
535
- bsp_market: foo[10] == 'Y' ? true : false
515
+ aux_hash = {
516
+ :market_id => foo[0].to_i,
517
+ :currency => foo[1].to_s,
518
+ :market_status => foo[2].to_s,
519
+ :in_play_delay => foo[3].to_i,
520
+ :number_of_winners => foo[4].to_i,
521
+ :market_information => foo[5].to_s,
522
+ :discount_allowed => foo[6] == 'true' ? true : false,
523
+ :market_base_rate => foo[7].to_s,
524
+ :refresh_time_in_milliseconds => foo[8].to_i,
525
+ :removed_selections => foo[9].to_s,
526
+ :bsp_market => foo[10] == 'Y' ? true : false
536
527
  }
537
528
 
538
- # now iterating over the prices excluding the first piece that we already parsed above
529
+ # now iterating over the prices excluding the first piece that we already parsed above
539
530
  pieces[1..-1].each do |piece|
540
531
  piece.gsub! "\0", '\:'
541
532
 
@@ -543,17 +534,17 @@ module Betfair
543
534
  # using the selection_id as hash key
544
535
  price_hash_key = bar[0].to_i
545
536
 
546
- price_hash[price_hash_key] = {
547
- selection_id: bar[0].to_i,
548
- order_index: bar[1].to_i,
549
- total_amount_matched: bar[2].to_f,
550
- last_price_matched: bar[3].to_f,
551
- handicap: bar[4].to_f,
552
- reduction_factor: bar[5].to_f,
553
- vacant: bar[6] == 'true' ? true : false,
554
- far_sp_price: bar[7].to_f,
555
- near_sp_price: bar[8].to_f,
556
- actual_sp_price: bar[9].to_f
537
+ price_hash[price_hash_key] = {
538
+ :selection_id => bar[0].to_i,
539
+ :order_index => bar[1].to_i,
540
+ :total_amount_matched => bar[2].to_f,
541
+ :last_price_matched => bar[3].to_f,
542
+ :handicap => bar[4].to_f,
543
+ :reduction_factor => bar[5].to_f,
544
+ :vacant => bar[6] == 'true' ? true : false,
545
+ :far_sp_price => bar[7].to_f,
546
+ :near_sp_price => bar[8].to_f,
547
+ :actual_sp_price => bar[9].to_f
557
548
  }
558
549
 
559
550
  # merge lay and back prices into price_hash
@@ -569,43 +560,29 @@ module Betfair
569
560
  string_raw = string
570
561
  string = string.split('|')
571
562
 
572
- price = {
573
- prices_string: nil,
574
- runner_matched: 0,
575
- last_back_price: 0,
576
- wom: 0,
577
- b1: 0,
578
- b1_available: 0,
579
- b2: 0,
580
- b2_available: 0,
581
- b3: 0,
582
- b3_available: 0,
583
- l1: 0,
584
- l1_available: 0,
585
- l2: 0,
586
- l2_available: 0,
587
- l3: 0,
588
- l3_available: 0
563
+ price = { :prices_string => nil, :selection_matched => 0, :last_back_price => 0, :wom => 0,
564
+ :b1 => 0, :b1_available => 0, :b2 => 0, :b2_available => 0, :b3 => 0, :b3_available => 0,
565
+ :l1 => 0, :l1_available => 0, :l2 => 0, :l2_available => 0, :l3 => 0, :l3_available => 0
589
566
  }
590
567
 
591
568
  if !string[0].nil? and !prices_only
592
- str = string[0].split('~')
569
+ str = string[0].split('~')
593
570
  price[:prices_string] = string_raw
594
- price[:runner_matched] = str[2].to_f
571
+ price[:selection_matched] = str[2].to_f
595
572
  price[:last_back_price] = str[3].to_f
596
573
  end
597
574
 
598
575
  # Get the b prices (which are actually the l prices)
599
576
  if !string[1].nil?
600
- b = string[1].split('~')
577
+ b = string[1].split('~')
601
578
  price[:b1] = b[0].to_f if !b[0].nil?
602
579
  price[:b1_available] = b[1].to_f if !b[1].nil?
603
580
  price[:b2] = b[4].to_f if !b[5].nil?
604
581
  price[:b2_available] = b[5].to_f if !b[6].nil?
605
582
  price[:b3] = b[8].to_f if !b[8].nil?
606
- price[:b3_available] = b[9].to_f if !b[9].nil?
583
+ price[:b3_available] = b[9].to_f if !b[9].nil?
607
584
  combined_b = price[:b1_available] + price[:b2_available] + price[:b3_available]
608
- end
585
+ end
609
586
 
610
587
  # Get the l prices (which are actually the l prices)
611
588
  if !string[2].nil?
@@ -615,16 +592,16 @@ module Betfair
615
592
  price[:l2] = l[4].to_f if !l[4].nil?
616
593
  price[:l2_available] = l[5].to_f if !l[5].nil?
617
594
  price[:l3] = l[8].to_f if !l[8].nil?
618
- price[:l3_available] = l[9].to_f if !l[9].nil?
595
+ price[:l3_available] = l[9].to_f if !l[9].nil?
619
596
  combined_l = price[:l1_available] + price[:l2_available] + price[:l3_available]
620
597
  end
621
598
 
622
599
  price[:wom] = combined_b / ( combined_b + combined_l ) unless combined_b.nil? or combined_l.nil?
623
600
 
624
- return price
601
+ return price
625
602
  end
626
-
627
- def odds_table
603
+
604
+ def odds_table
628
605
  odds_table = []
629
606
  (1.01..1.99).step(0.01).each { |i| odds_table << i.round(2) }
630
607
  (2..2.98).step(0.02).each { |i| odds_table << i.round(2) }