Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does anyone have c# code to use betfair api?

Tags:

c#

betfair

I am creating a c# windows app to display current sports market rates using betfair exchange webservice, I used the

getmarketpricescompressed()

method 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 properly unpack this string, for now i am using 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 a few matches, but i observed the string changes for a few other matches and it thus generates exceptions, Can any1 help me with a proper code to unpack this string, i've googled it and found a vb code, which was not very usefull,

and btw, i want to arrange the data in something like this:

enter image description here

like image 853
Samy S.Rathore Avatar asked Jul 24 '12 06:07

Samy S.Rathore


People also ask

How many caesareans can a woman have?

“So, every patient is different and every case is unique. However, from the current medical evidence, most medical authorities do state that if multiple C-sections are planned, the expert recommendation is to adhere to the maximum number of three.”

Can adults get C?

The majority of C. difficile infections occur in people who are or who have recently been in a health care setting — including hospitals, nursing homes and long-term care facilities — where germs spread easily, antibiotic use is common and people are especially vulnerable to infection.

Can cats get C?

Yes. A small percentage (1-5%) of healthy dogs and cats carry C.

How long is a person contagious with C. diff?

Infected children should stay home from day care until 24 hours after diarrhea has stopped. You do not need to notify parents, other teachers, or the health department about a child who has C. diff. Infected children can use public restrooms.


2 Answers

Consider the following:

a|b|c|d

In this, you have four chunks. But it doesn't necessarily have to be only four. It can be two, it can be six.

Try going at it by iterating the string-array you get as a result of the

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

Something like

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

Consider using a more dynamic approach in presenting your data as well, using a row-based, repeating control instead of static textboxes. =)

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

like image 75
J. Steen Avatar answered Oct 06 '22 20:10

J. Steen


Just guessing, I think the data is organised like this

first delimited by : 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~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 think that first row is clearly a header, that first number being the market ID perhaps. Likewise, the first part of each subsequent section is a row identifier. Delimited by ~ something like

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

I think the price rows are delimited by ~ in tuples of 4, like this

(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

for example.

To test my guesses I'd have to compare with the BetFair rendering on thier web site.

like image 30
Jodrell Avatar answered Oct 06 '22 20:10

Jodrell