
Just started writing an infrastructure library in java for betdaq.
Has anyone noticed errorcode 406 'punter is blacklisted' being returned randomly?
Is it their way of throttling or something?
Just started writing an infrastructure library in java for betdaq.
Has anyone noticed errorcode 406 'punter is blacklisted' being returned randomly?
Is it their way of throttling or something?
Yes it is their way of throttling. Here's a relevant bit from an old email (might have changed by now):
The thresholds are applied in a historic 60 second sliding window and the blacklisted in period is also 60 seconds - during this window no API calls will be processed [with exception of Cancel] and an blacklisting return code is sent back to the calling application. You can cancel during a blacklisting window, but this does contribute further to the length of the blacklisting window. You can call the ListBlacklistInformation call to get details of blacklisted API call and how long more the user is blacklisted for.
The below values are default values and we do have the ability to change these on a per user basis, but in reality.
The threshold [per minute are] are
PlaceOrdersNoReceipt = 1000 [count of all calls made to the PlaceOrdersNoReceipt ]
PlaceOrdersWithReceipt = 1000 [count of all calls made to the PlaceOrdersWithReceipt ]
Combined = 1500 [count of all calls made to the api]
Any=1000 [count of calls to any api call other than PlaceOrdersNoReceipt & PlaceOrdersWithReceipt]
ListBootstrapOrders=50
GetEventSubTreeNoSelections=50
Hi,
Might be worth contacting betdaq as they have in the past supplied me with a bespoke WSDL file when I have had problems with their web service.
Sorry I can not supply any more details, but I know they have been helpful with this in the past so worth doing.
Thanks Fred, thought so ... it's good to hit and find out this kind of thing early on.
birchy, not using netbeans (not sure what soap toolkit it uses under the hood either)... I'm using axis2-1.4 with no problems so far ...
Here are some files from my BETDAQ Java test harness. I managed to get JAX-WS to consume the WSDL by modifying the WSDL to include the namespace that wsimport claims is missing and by renaming the elements (to remove a name conflict) using a binding customization. (When I tinker with Java, I use Eclipse; included is an ant build file for the wsimport task.)
You also have to fight with JAX-WS to get the BETDAQ header into the SOAP requests; you'll need to modify the ExternalApiHeader class that wsimport generates, adding an XML annotation.
The Test class will also show you what you need to do to enable gzip compression for the SOAP requests (if you're using JAX-WS, that is).
That WSDL and SOAP are this complicated is a joke. Simple Object Access Protocol my arse.

Sounds like the jax-ws tools you are using might be incomplete somehow. Don't blame poor WSDL and SOAP. :)
Axis2 v1.4 takes the betdaq wsdl no problem straight out of the box.
It was Sun's JAX-WS reference implementation and, yes, incomplete seems like an appropriate adjective; fragile is another. After looking into what needed to be done to get it to work with the Sun implementation (I'm afraid my curiosity got the better of me) I'd agree that axis2 would be a better choice.
Almost month ago I realesed BXTrader for Betdaq and received this information about throttling from betdaq api team:
“We want to limit the calls of GetPrices to every 200 ms for all trading applications. We do not see any tangible benefit with a refresh rate lower than this.
Is it possible to have more than 1 market open polling for prices with your application at a time? If so, is there a limitation on the number of markets polling? Do they all poll for prices with the same frequency?
Please note, we will reserve the right to throttle GetPrices calls for people who are significantly and continuously calling GetPrices without placing bets or calling high volumes of GetPrices with a disproportionately low percentage of Placing orders call.”
So keep this in mind when writing betdaq bots.
inksmithy, I am from Slovakia, so my internet connection latency is not comparable with your one but I can get max. 17 responses per second for market data from betfair web services, slightly lower numbers for betdaq.
if (markClosed == false)
{
System.out.println("1: getting prices " + new Date(System.currentTimeMillis()).toString());
this.getThePrices(id);
}
else
{
continue;
}
}
}
completed = true;
}
public void getThePrices(int id)
{
System.out.println("2: sending " + new Date(System.currentTimeMillis()).toString());
try
{
try
{
com.betfair.publicapi.v5.bfexchangeservice.BFExchangeService_Service service = new com.betfair.publicapi.v5.bfexchangeservice.BFExchangeService_Service();
com.betfair.publicapi.v5.bfexchangeservice.BFExchangeService port = service.getBFExchangeService();
com.betfair.publicapi.types.exchange.v5.GetMarketPricesCompressedReq request = new com.betfair.publicapi.types.exchange.v5.GetMarketPricesCompressedReq();
request.setMarketId(id);
APIRequestHeader theHeader = ExHeader.makeHeader();
request.setHeader(theHeader);
com.betfair.publicapi.types.exchange.v5.GetMarketPricesCompressedResp result = port.getMarketPricesCompressed(request);
System.out.println("3: got them" + new Date(System.currentTimeMillis()).toString());
if (result.getErrorCode() != result.getErrorCode().OK)
{
System.out.println(result.getErrorCode().value());
}
1: getting prices Sun Nov 16 14:54:37 GMT 2008
2: sending Sun Nov 16 14:54:37 GMT 2008
14:54:54
14:54:54
3: got themSun Nov 16 14:54:56 GMT 2008
14:54:56
14:54:56
Atromitos v Ionikos
odds difference 1 = 0.0
odds difference 2 = 0.0
1: getting prices Sun Nov 16 14:54:57 GMT 2008
2: sending Sun Nov 16 14:54:57 GMT 2008
3: got themSun Nov 16 14:55:11 GMT 2008
System.out.println()calls are structured like this:
It's been a while since this topic was active, if you'd like to get it going again, please post as a registered member