Code Monkey home page Code Monkey logo

betfair's Introduction

Betfair

A lightweight ruby wrapper for the Betfair Exchange API (API-NG).

Full API description, including API parameters etc, is available from Betfair's dedicated API site.

Oh, and always bet responsibly. Duh.

Installation

Add this line to your application's Gemfile:

gem 'betfair-ng'

And then execute:

$ bundle

Or install it yourself as:

$ gem install betfair-ng

Usage

# create a client with app code
client = Betfair::Client.new("X-Application" => "your_app_code")

# let's log in.
client.interactive_login("your_username", "your_password")

# you can do stuff like list event types:
event_types = client.list_event_types(filter: {})
# =>  [
#       {
#         "eventType"=>{
#           "id"=>"7",
#           "name"=>"Horse Racing"
#         },
#         "marketCount"=>215
#       },
#       ..etc..
#     ]

# todays GB & Ireland horse racing win & place markets
racing_et_id = event_types.find{|et| et["eventType"]["name"] == "Horse Racing"}["eventType"]["id"]

racing_markets = client.list_market_catalogue({
  filter: {
    eventTypeIds: [racing_et_id],
    marketTypeCodes: ["WIN", "PLACE"],
    marketStartTime: {
      from: Time.now.beginning_of_day.iso8601,
      to: Time.now.end_of_day.iso8601
    },
    marketCountries: ["GB", "IRE"]
  },
  maxResults: 200,
  marketProjection: [
    "MARKET_START_TIME",
    "RUNNER_METADATA",
    "RUNNER_DESCRIPTION",
    "EVENT_TYPE",
    "EVENT",
    "COMPETITION"
  ]
})

# given an eventId from the market catalogue (the first for example),
# let's have a flutter shall we?
market = racing_markets.first
market_id = market["marketId"]
selection_id = market["runners"].find { |r| r["runnerName"] == "Imperial Commander" }["selectionId"]

# this places an Betfair SP bet with a price limit of 3.0 .
# see the API docs for the different types of orders.
client.place_orders({
  marketId: market_id,
  instructions: [{
    orderType: "LIMIT_ON_CLOSE",
    selectionId: selection_id,
    side: "BACK",
    limitOnCloseOrder: {
      liability: liability,
      price: 3.0
    }
  }]
})

# log back out.
client.logout

Settings

You can change the endpoint from the default api.betfair.com .. to api-au.betfair.com by using the endpoint option when you initialize the Betfair client.

client = Betfair::Client.new({ "X-Application" => "your_app_code" }, { endpoint: :aus })

The default is :default.

Best practices

Persistent HTTP connection

Betfair recommends that we pass the Connection: keep-alive header with each request in order to take advantage of HTTP 1.1's ability to have persistent connections which reduces latency for subsequent requests.

This library uses the httpi gem, which supports a number of different ruby http client adapters. httpclient and net-http-persistent are two which utilise persistent connections by default. To use net-http-persistent you should ensure that the gem is installed and in your load path, then set the HTTPI adapter:

require 'betfair'
HTTPI.adapter = :net_http_persistent

The same goes for httpclient, but it's not strictly necessary to explicitly set the adapter as it has a higher load order precedence than the other adapters.

Account security and authentication

Despite the example in this readme, you should definitely use the non-interactive login for your bots; check the Betfair docs about how to set that up. To login this way, use the non_interactive_login method:

# Performs the login procedure recommended for applications which run autonomously
#   username: Betfair account username string
#   password: Betfair account password string
#   cert_key_file_path: Path to Betfair client certificate private key file
#   cert_key_path: Path to Betfair client certificate public key file associated with Betfair account
client.non_interactive_login(username, password, cert_key_file_path, cert_file_path)

This also allows you to use 2-factor authentication for your online account access, which I'd also strongly recommend that you do. I'm pretty sure you wouldn't be comfortable if your bank accounts had nothing more advanced than credential access, and seeing as a lot of you will have a reasonable amount of money stored in your Betfair accounts, I don't think you should settle for that there, either.

Todo

  1. Error handling

Contributing

  1. Fork it ( https://github.com/mikecmpbll/betfair/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.