def get_sports(self, status=MarketStates.All, order=SportsOrder.NameAsc, per_page=500, session=None): """ Lookup all sports, filter for active only/all. :param status: filter results by sport status, default 'active'. :type status: MatchbookAPI.bin.enums.SportStatus :param order: order in which results are returned, default 'name asc'. :type order: MatchbookAPI.bin.enums.SportsOrder :param per_page: no. of sports returned in a single response, Max 500. Default 20. :type per_page: int :param session: requests session to be used. :type session: requests.Session :return: Sports that are active on the betting platform. :rtype: json :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() response = self.request("GET", self.client.urn_edge, 'lookups/sports', params=params, session=session) return self.process_response(response.json().get('sports', []), resources.SportsDetails, date_time_sent, datetime.datetime.utcnow())
def get_current_offers(self, sport_ids=None, event_ids=None, market_ids=None, offset=0, per_page=500, session=None) \ -> List[resources.Order]: """ Get a list of current offers i.e. offers on markets yet to be settled. :param sport_ids: operate only on orders on specified sports. :type sport_ids: comma separated string :param event_ids: operate only on orders on specified events. :type event_ids: comma separated string :param market_ids: operate only on orders on specified markets. :type market_ids: comma separated string :param offset: starting point of results. Default 0. :type offset: int :param per_page: no. of offers returned in a single response, Max 500. Default 20. :type per_page: int :param session: requests session to be used. :type session: requests.Session :returns: Orders data :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() response = self.request('GET', self.client.urn_edge, 'reports/v1/offers/current', params=params, target='offers', session=session) return self.process_response(response, resources.Order, date_time_sent, datetime.datetime.now())
def delete_bulk_orders(self, event_ids=None, market_ids=None, runner_ids=None, offer_ids=None, session=None): """ Delete all orders which fit the argument filters. :param event_ids: bulk delete orders on specified events. :type event_ids: comma separated string :param market_ids: bulk delete orders on specified markets. :type market_ids: comma separated string :param runner_ids: bulk delete orders on specified runners. :type runner_ids: comma separated string :param offer_ids: delete specific order id. Max offerids in one delete request is 25 :type offer_ids: comma separated string :param session: requests session to be used. :type session: requests.Session :returns: orders deletion report. :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() method = 'offers' response = self.request('DELETE', self.client.urn_edge, method, data=params, session=session) date_time_received = datetime.datetime.utcnow() return self.process_response(response.json().get('offers', []), resources.Order, date_time_sent, date_time_received)
def get_popular_markets(self, price_depth=3, side=Side.All, minimum_liquidity=None, old_format=Boolean.F, session=None): """ Get popular markets as defined by matchbook. :param price_depth: max depth to be returned for prices. Default 3. :type price_depth: int :param side: filter results by side (dependent on exchange-type). Default None. :type side: matchbook.enums.Side :param minimum_liquidity: Only prices with available-amount greater than or equal to this value are included. :type minimum_liquidity: float :param old_format: :type old_format: :param session: requests session to be used. :type session: requests.Session :returns: Breakdown of each runner if they are included. :rtype: json :raises: matchbook.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() params['odds-type'] = self.client.odds_type params['exchange-type'] = self.client.exchange_type params['currency'] = self.client.currency response = self.request('GET', self.client.urn_edge, 'popular-markets', params=params, session=session) return self.process_response( response.json().get('markets', response.json()), resources.Market, date_time_sent, datetime.datetime.utcnow() )
def get_positions(self, event_ids=None, market_ids=None, runner_ids=None, offset=0, per_page=500, session=None): #TODO: Make positions resource """ Get potential profit or loss on each runner. :param event_ids: operate only on orders on specified events. :type event_ids: comma separated string :param market_ids: operate only on orders on specified markets. :type market_ids: comma separated string :param runner_ids: operate only on orders on specified runners. :type runner_ids: comma separated string :param offset: starting point of results. Default 0. :type offset: int :param per_page: no. of offers returned in a single response, Max 500. Default 20. :type per_page: int :param session: requests session to be used. :type session: requests.Session :returns: Orders data :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() method = 'account/positions' response = self.request("GET", self.client.urn_edge, method, params=params, session=session) date_time_received = datetime.datetime.utcnow() return self.process_response( response.json().get('bets', []), resources.Order, date_time_sent, date_time_received )
def get_agg_matched_bets(self, event_ids=None, market_ids=None, runner_ids=None, side=None, offset=0, per_page=500, aggregation_type=AggregationType.Default, session=None): # TODO: Make aggregate matched bets resource """ Get matched bets aggregated. :param event_ids: operate only on orders on specified events. :type event_ids: comma separated string :param market_ids: operate only on orders on specified markets. :type market_ids: comma separated string :param runner_ids: operate only on orders on specified runners. :type runner_ids: comma separated string :param offset: starting point of results. Default 0. :type offset: int :param per_page: no. of offers returned in a single response, Max 500. Default 20. :type per_page: int :param side: filter results by side (dependent on exchange-type). Default None. :type side: MatchbookAPI.bin.enums.Side :param aggregation_type: how to aggregate bets :type aggregation_type: matchbook.enums.AggregationType :param session: requests session to be used. :type session: requests.Session :returns: Orders data :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() method = 'bets/matched/aggregated' response = self.request("GET", self.client.urn_edge, method, params=params, target='bets', session=session) date_time_received = datetime.datetime.utcnow() return self.process_response( response, resources.MatchedBets, date_time_sent, date_time_received )
def get_events(self, event_id=None, before=None, after=None, sport_ids=None, category_ids=None, states=MarketStates.All, tag_url_names=None, per_page=500, offset=0, include_event_participants=Boolean.T, price_depth=3, side=Side.All, minimum_liquidity=None, session=None): """ Get paginated events. Results can be filtered using various different parameters. :param event_id: specific event id. Default None. :type event_id: int :param after: event start time lower cutoff. Default None. :type after: UNIX timestamp :param before: event start time upper cutoff. Default None. :type before: UNIX timestamp :param category_ids: filter results by category id. Default None. :type category_ids: comma separated string :param sport_ids: filter results by sports id(s). Default None. :type sport_ids: comma separated string :param states: filter results by event state or comma separated string of types. Default None. :type states: matchbook.enums.MarketStates :param tag_url_names:Only events with tags having url-name in the provided list are included in the response. :type tag_url_names: comma separated string :param per_page: number of results to show in a single result. Max=500. Default 20. :type per_page: int :param offset: starting page of results to show. Default 0. :type offset: int :param include_event_participants: A boolean indicating whether to return the event participants information :type include_event_participants: matchbook.enums.Boolean :param price_depth: max depth to be returned for prices. Default 3. :type price_depth: int :param side: filter results by side (dependent on exchange-type). Default None. :type side: matchbook.enums.Side :param minimum_liquidity: Only prices with available-amount greater than or equal to this value are included. :type minimum_liquidity: float :param session: requests session to be used. :type session: requests.Session :returns: Breakdown to each runner if they are included. :rtype: json :raises: matchbook.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() method = 'events' params['odds-type'] = self.client.odds_type params['exchange-type'] = self.client.exchange_type params['currency'] = self.client.currency if event_id: method = 'events/%s' % event_id del_keys = ['event-id', 'after', 'before', 'category-ids', 'sport-ids', 'states', 'per-page', 'offset', 'tag-url-names'] params = {k: v for k, v in params.items() if k not in del_keys} response = self.request("GET", self.client.urn_edge, method, params=params, session=session) response = response.json().get('event', response.json()) else: response = self.request( "GET", self.client.urn_edge, method, params=params, target='events', session=session ) return self.process_response(response, resources.Event, date_time_sent, datetime.datetime.utcnow())
def get_orders(self, event_ids=None, market_ids=None, runner_ids=None, offer_id=None, offset=0, per_page=500, interval=None, side=Side.Default, status=Status.Default, session=None) \ -> List[resources.Order]: """ Get all orders which fit the argument filters. :param event_ids: operate only on orders on specified events. :type event_ids: comma separated string :param market_ids: operate only on orders on specified markets. :type market_ids: comma separated string :param runner_ids: operate only on orders on specified runners. :type runner_ids: comma separated string :param offer_id: specific order id to use. :param offset: starting point of results. Default 0. :type offset: int :param per_page: no. of offers returned in a single response, Max 500. Default 20. :type per_page: int :param interval: check for orders updated/created in last x seconds, status param must be 'matched'. :type interval: int :param side: filter results by side (dependent on exchange-type). Default None. :type side: MatchbookAPI.bin.enums.Side :param status: operate only on orders with specified status. Default None. :type status: MatchbookAPI.bin.enums.Status :param session: requests session to be used. :type session: requests.Session :returns: Orders data :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) params['exchange-type'] = self.client.exchange_type method = 'offers' date_time_sent = datetime.datetime.utcnow() if offer_id: method = 'offers/{0}'.format(offer_id) params = {'odds-type': self.client.odds_type} response = self.request("GET", self.client.urn_edge, method, params=params, session=session).json() else: response = self.request("GET", self.client.urn_edge, method, params=params, target='offers', session=session) date_time_received = datetime.datetime.utcnow() return self.process_response(response, resources.Order, date_time_sent, date_time_received)
def get_markets(self, event_id, market_id=None, names=MarketNames.All, types=MarketType.All, offset=0, per_page=500, states=MarketStates.All, price_depth=3, side=Side.Default, minimum_liquidity=None, session=None): """ Get paginated markets for an event specified by the event_id. :param event_id: specific event id. :type event_id: int :param market_id: specific market id to pull data for. :type market_id: int :param states: filter results by market state or a comma separated string of states. Default 'open', 'suspended' :type states: matchbook.enums.MarketStates :param types: filter results by market type or a comma separated string of types. Default None. :type types: matchbook.enums.MarketType :param names: filter results by market name. Default None. :type names: matchbook.enums.MarketNames :param per_page: number of results to show in a single result. Max=500. Default 20. :type per_page: int :param offset: starting page of results to show. Default 0. :type offset: int :param price_depth: max depth to be returned for prices. Default 3. :type price_depth: int :param side: filter results by side (dependent on exchange-type). Default None. :type side: matchbook.enums.Side :param minimum_liquidity: Only prices with available-amount greater than or equal to this value are included. :type minimum_liquidity: float :param session: requests session to be used. :type session: requests.Session :returns: Breakdown of each runner if they are included. :rtype: json :raises: matchbook.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() params['odds-type'] = self.client.odds_type params['exchange-type'] = self.client.exchange_type params['currency'] = self.client.currency method = 'events/%s/markets' % event_id if market_id: method = 'events/%s/markets/%s' % (event_id, market_id) del_keys = ['names', 'types', 'per-page', 'offset', 'states'] params = {k: v for k, v in params.items() if k not in del_keys} response = self.request('GET', self.client.urn_edge, method, params=params, session=session) response = response.json().get('market', response.json()) else: response = self.request( "GET", self.client.urn_edge, method, params=params, target='markets', session=session ) return self.process_response(response, resources.Market, date_time_sent, datetime.datetime.utcnow())
def get_runners(self, event_id, market_id, runner_id=None, states=MarketStates.All, include_withdrawn=Boolean.T, include_prices=Boolean.T, price_depth=3, side=Side.All, minimum_liquidity=None, session=None): """ Get runner data for an event and market specified by their ids. :param event_id: specific event id. :type event_id: int :param market_id: specific market id to pull data for. :type market_id: int :param runner_id: specific runner to pull data for. :type runner_id: int :param states: filter results by runner state or a comma separated string of states. Default 'open', 'suspended' :param include_withdrawn: boolean for returning or not the withdrawn runners in the response. :type include_withdrawn: matchbook.enums.Boolean :param include_prices: boolean indicating whether to return the prices for the runners. :type include_prices: matchbook.enums.Boolean :type states: matchbook.enums.MarketStates :param price_depth: max depth to be returned for prices. Default 3. :type price_depth: int :param side: filter results by side (dependent on exchange-type). Default None. :type side: matchbook.enums.Side :param minimum_liquidity: Only prices with available-amount greater than or equal to this value are included. :type minimum_liquidity: float :param session: requests session to be used. :type session: requests.Session :returns: Breakdown of each runner if they are included. :rtype: json :raises: matchbook.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() params['odds-type'] = self.client.odds_type params['exchange-type'] = self.client.exchange_type params['currency'] = self.client.currency method = 'events/%s/markets/%s/runners' % (event_id, market_id) if runner_id: method = 'events/%s/markets/%s/runners/%s' % (event_id, market_id, runner_id) del_keys = ['include-withdraw', 'states'] params = {k: v for k, v in params.items() if k not in del_keys} response = self.request('GET', self.client.urn_edge, method, params=params, session=session) response = response.json().get('runner', response.json()) else: response = self.request( 'GET', self.client.urn_edge, method, params=params, target='runners', session=session ).json() return self.process_response(response, resources.Runner, date_time_sent, datetime.datetime.utcnow())
def get_settled_bets(self, sport_ids=None, event_ids=None, market_ids=None, before=None, after=None, offset=0, per_page=500, session=None): """ Get a list of settled bets. :param sport_ids: operate only on bets on specified sports. :type sport_ids: comma separated string :param event_ids: operate only on bets on specified events. :type event_ids: comma separated string :param market_ids: operate only on bets on specified markets. :type market_ids: comma separated string :param after: event start time lower cutoff. Default None. :type after: UNIX timestamp :param before: event start time upper cutoff. Default None. :type before: UNIX timestamp :param offset: starting point of results. Default 0. :type offset: int :param per_page: no. of offers returned in a single response, Max 500. Default 20. :type per_page: int :param session: requests session to be used. :type session: requests.Session :returns: Orders data :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() response = self.request('GET', self.client.urn_edge, 'reports/v1/bets/settled', params=params, target='bets', session=session) return self.process_response(response, resources.BetReport, date_time_sent, datetime.datetime.now())
def wallet_transfer(self, amount, session=None): #TODO: Populate Acccount Transfer Resource. """ Transfer balance from one :param amount: amount to be transferred, >0 for casino to sports transfer, <0 for the opposite. :type amount: float :param session: requests session to be used. :type session: requests.Session :return: details of the success/failure of the transfer. """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() date_time_received = datetime.datetime.utcnow() response = self.request("POST", self.client.urn_main, 'account/transfer', data=params, session=session) return self.process_response(response.json(), resources.AccountTransfer, date_time_sent, date_time_received)
def get_old_transactions_report(self, offset=0, per_page=500, after=None, before=None, period=PeriodFilter.Default, categories=TransactionCategories.Exchange, session=None): """ Get paginated historical transactions, filtered by arguments specified :param offset: starting point from which the paginated results begin. Default 0. :type offset: int :param per_page: number of bets to be returned per call, max 500. Default 20. :type per_page: int :param after: event start time lower cutoff. Default 0. :type after: UNIX timestamp :param before: event start time upper cutoff. Default current time. :type before: UNIX timestamp :param period: filter for the amount of time to include in settlement search. :type period: matchbook.enums.PeriodFilter :param categories: where the transaction was incurred, casino or exchange. :type categories: matchbook.enums.TransactionCategories :param session: requests session to be used. :type session: requests.Session :returns: Historical transaction info. :rtype: json :raises: matchbook.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() response = self.request('GET', self.client.urn_main, 'reports/transactions', params=params, target='transactions', session=session) return self.process_response(response, resources.TransactionReport, date_time_sent, datetime.datetime.now())
def get_new_transactions_report(self, transaction_type=TransactionTypes.All, offset=0, per_page=500, after=None, before=None, session=None): # TODO: Map resource and get example data for data_structures """ Get paginated historical transactions, filtered by arguments specified :param offset: starting point from which the paginated results begin. Default 0. :type offset: int :param per_page: number of bets to be returned per call, max 500. Default 20. :type per_page: int :param after: event start time lower cutoff. Default 0. :type after: UNIX timestamp :param before: event start time upper cutoff. Default current time. :type before: UNIX timestamp :param transaction_type: filter by type of transaction. :type transaction_type: matchbook.enums.TransactionTypes :param session: requests session to be used. :type session: requests.Session :returns: Historical transaction info. :rtype: json :raises: matchbook.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() response = self.request('GET', self.client.urn_edge, 'reports/v1/transactions', params=params, target='transactions', session=session) return self.process_response(response, resources.TransactionReport, date_time_sent, datetime.datetime.now())
def get_navigation(self, offset=0, per_page=500, session=None): # TODO: Map meta-tags to a resource. """ Get page navigation tree breakdown. :param offset: starting point of results. Default 0. :type offset: int :param per_page: no. of offers returned in a single response, Max 500. Default 20. :type per_page: int :param session: requests session to be used. :type session: requests.Session :returns: Orders data :raises: MatchbookAPI.bin.exceptions.ApiError """ params = clean_locals(locals()) date_time_sent = datetime.datetime.utcnow() response = self.request("GET", self.client.urn_edge, 'navigation', params=params, session=session) return self.process_response(response.json(), resources.MetaTags, date_time_sent, datetime.datetime.utcnow())