Does anyone have c # code to use betfair api?

I am creating a C # windows application to display current market rates in the market using the betfer exchange webfervice, I used

getmarketpricescompressed ()

which returns a price string that looks like this:

106093239~GBP~ACTIVE~0~1~~true~5.0~1343114432333~~N:7337~1~6992.56~2.16~~~false~~~~|2.16~1036.19~L~1~2.14~97.18~L~2~2.12~5.0~L~3~|2.18~467.36~B~1~2.2~34.12~B~2~2.22~162.03~B~3~:414464~2~102181.96~1.86~~~false~~~~|1.85~2900.33~L~1~1.84~1831.59~L~2~1.83~1593.73~L~3~|1.86~58.83~B~1~1.87~1171.77~B~2~1.88~169.15~B~3~ 

I don't know how to unzip this line correctly while I use this code:

 GetMarketPricesCompressedReq price_req1 = new GetMarketPricesCompressedReq(); price_req1.header = header2; price_req1.marketId = marketid_temp; price_req1.currencyCode = "GBP"; GetMarketPricesCompressedResp price_resp = new GetMarketPricesCompressedResp(); price_resp = bfg2.getMarketPricesCompressed(price_req1); //MessageBox.Show(price_resp.errorCode.ToString()); //richTextBox1.Text = ""; //richTextBox1.Text = price_resp.marketPrices; string prices = price_resp.marketPrices; richTextBox1.Text = price_resp.marketPrices; string[] ab1 = prices.Split('|'); string[] temp = ab1[1].Split('~'); textBox3.Text = temp[0]; textBox4.Text = temp[4]; textBox5.Text = temp[8]; temp = ab1[2].Split('~'); textBox6.Text = temp[0]; textBox7.Text = temp[4]; textBox8.Text = temp[8]; temp = ab1[3].Split('~'); textBox9.Text = temp[0]; textBox10.Text = temp[4]; textBox11.Text = temp[8]; temp = ab1[4].Split('~'); textBox12.Text = temp[0]; textBox13.Text = temp[4]; textBox14.Text = temp[8]; if (ab1.Length >5) { temp = ab1[5].Split('~'); textBox15.Text = temp[0]; textBox16.Text = temp[4]; textBox17.Text = temp[8]; temp = ab1[6].Split('~'); textBox18.Text = temp[0]; textBox19.Text = temp[4]; textBox20.Text = temp[8]; } 

It works fine for multiple matches, but I noticed line changes for several other matches and thus throws exceptions. Maybe any1 help me with the proper code to unzip this line, I looked for it and found a vb code that was not very useful ,

and btw, I want to arrange the data like this:

enter image description here

+6
source share
3 answers

Just guessing, I think the data is organized like this:

first dividing : then | we get

106093239 ~ ~ GBP ACTIVE ~ 0 ~ 1 ~~ true ~ 5.0 ~ 1343114432333 ~~ N

7337 ~ 1 ~ ~ 6992.56 2.16 ~~~ ~~~~ false
2.16 ~ 1036.19 ~ L ~ 1 ~ 2.14 ~ 97.18 ~ L ~ 2 ~ 2.12 ~ 5.0 ~ L ~ 3 ~ 2.18 ~ 467.36 ~ V ~ 1 ~ 2.2 ~ 34.12 ~ V ~ 2 ~ 2.22 ~ 162.03 ~ V ~ 3 ~

414464 ~ 2 ~ ~ 102181.96 1.86 ~~~ false ~~~~ 1.85 ~ 2900.33 ~ L ~ 1 ~ 1.84 ~ 1831.59 ~ L ~ 2 ~ 1.83 ~ 1593.73 ~ L ~ 3 ~ 1.86 ~ 58.83 ~ V ~ 1 ~ 1.87 ~ 1171.77 ~ V ~ 2 ~ 1.88 ~ 169.15 ~ V ~ 3 ~

I think the first line is clearly the heading, perhaps the first number is the market identifier. Similarly, the first part of each subsequent section is a line identifier. Indicated ~ something like

(SelectionId) 7337 (Order) 1 (TotalMatched?) 6992.56 (EvenPoint) 2.16 (???) false

I think the price lines are divided by ~ in tuples 4, for example,

(Price) 2.16 (MatchAvailable) 1036.19 (Type) L (Order) 1
(Price) 2.14 (MatchAvailable) 0097.18 (Type) L (Order) 2
(Price) 2.12 (MatchAvailable) 0005.00 (Type) L (Order) 3

eg.

To test my guesses, I would have to compare with the BetFair rendering on your website.

+2
source

Consider the following:

 a|b|c|d 

In this case, you have four pieces. But this does not have to be only four. It can be two, it can be six.

Try going to it, iterating through the string array resulting from

 string[] ab1 = prices.Split('|'); 

Sort of

 foreach(var stringChunk in ab1) { string[] temp = stringChunk.Split('~'); // use the strings here as you please } 

Consider using a more dynamic approach to presenting your data using a line-based repeating element instead of static text fields. =)

Full documentation for compressed data is available here: https://docs.developer.betfair.com/betfair/#!page=00008360-MC.00008307-MC

+3
source

I converted the vb code to C # myself, if anyone can find it useful, I post it here:

 using Microsoft.VisualBasic; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Diagnostics; namespace stock { class UnpackMarketPricesCompressed : stock.BFExchangeService.MarketPrices { //The substitute code for "\:" private const string ColonCode = "&%^@"; //Unpack the string public UnpackMarketPricesCompressed(string MarketPrices) { string[] Mprices = null; string[] Part = null; string[] Field = null; int n = 0; Mprices = MarketPrices.Replace("\\:", ColonCode).Split(':'); //Split header and runner data Field = Mprices[0].Replace("\\~", "-").Split('~'); //Split market data fields marketId = Convert.ToInt32(Field[0]); //Assign the market data currencyCode = Field[1]; marketStatus = (stock.BFExchangeService.MarketStatusEnum)Enum.Parse(typeof(stock.BFExchangeService.MarketStatusEnum), Field[2], true); delay = Convert.ToInt32(Field[3]); numberOfWinners = Convert.ToInt32(Field[4]); marketInfo = Field[5].Replace(ColonCode, ":"); discountAllowed = (Field[6].ToLower() == "true"); marketBaseRate = float.Parse(Field[7]); lastRefresh = long.Parse(Field[8]); removedRunners = Field[9].Replace(ColonCode, ":"); bspMarket = (Field[10] == "Y"); n = Mprices.Length - 1; // ERROR: Not supported in C#: ReDimStatement //For each runner for (int i = 0; i <= n; i++) { Part = Mprices[i + 1].Split('|'); //Split runner string into 3 parts Field = Part[0].Split('~'); //Split runner data fields runnerPrices[i] = new stock.BFExchangeService.RunnerPrices(); var _with1 = runnerPrices[i]; //Assign the runner data _with1.selectionId = Convert.ToInt32(Field[0]); _with1.sortOrder = Convert.ToInt32(Field[1]); _with1.totalAmountMatched = Convert.ToDouble(Field[2]); _with1.lastPriceMatched = Convert.ToDouble(Field[3]); _with1.handicap = Convert.ToDouble(Field[4]); _with1.reductionFactor = Convert.ToDouble(Field[5]); _with1.vacant = (Field[6].ToLower() == "true"); _with1.farBSP = Convert.ToDouble(Field[7]); _with1.nearBSP = Convert.ToDouble(Field[8]); _with1.actualBSP = Convert.ToDouble(Field[9]); _with1.bestPricesToBack = Prices(Part[1]); _with1.bestPricesToLay = Prices(Part[2]); } } private stock.BFExchangeService.Price[] Prices(string PriceString) { string[] Field = null; stock.BFExchangeService.Price[] Price = null; int k = 0; int m = 0; Field = PriceString.Split('~'); //Split price fields m = (Field.Length / 4) - 1; //m = number of prices - 1 // ERROR: Not supported in C#: ReDimStatement for (int i = 0; i <= m; i++) { Price[i] = new stock.BFExchangeService.Price(); var _with2 = Price[i]; _with2.price = Convert.ToInt32(Field[k + 0]); //Assign price data _with2.amountAvailable = Convert.ToInt32(Field[k + 1]); _with2.betType = (stock.BFExchangeService.BetTypeEnum)Enum.Parse(typeof(stock.BFExchangeService.BetTypeEnum), Field[k + 2], true); _with2.depth = Convert.ToInt32(Field[k + 3]); k += 4; } return Price; //Return the array of prices } } } 
+2
source

Source: https://habr.com/ru/post/921173/


All Articles