Beispiel #1
0
    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())
Beispiel #2
0
    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())
Beispiel #3
0
    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)
Beispiel #4
0
    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()
        )
Beispiel #5
0
 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
     )
Beispiel #6
0
    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
        )
Beispiel #7
0
    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())
Beispiel #8
0
    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)
Beispiel #9
0
    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())
Beispiel #10
0
    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())
Beispiel #11
0
 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())
Beispiel #12
0
 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)
Beispiel #13
0
    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())
Beispiel #14
0
    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())
Beispiel #15
0
    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())