Betfair API mit Java und Netbeans (Teil3) – Anleitung/Tutorial – Alle Märkte auflisten

Hier im dritten Teil des Tutorials zur Betfair API Programmierung mit Java und Netbeans zeige ich euch wie ihr alle Märkte von Betfair auslesen und auflisten könnt. Voraussetzung für dieses Tutorial ist, dass ihr den Login zur Betfairseite bereits hergestellt habt. Wie das genau geht, hab ich bereits im zweiten Teil des Tutorials beschrieben.

Das Arbeiten mit der Betfair API läuft immer nach dem selben Schema ab. Wenn ihr das Konzept einmal raus habt, könnt ihr nach herzenslust verschiedene Funktionen ausprobieren. Zuerst wird immer eine Anfrage/Request erstellt, dem wir den Header unserer Loginsession übergeben. In diesem Header ist eine Zeichenkette (Session Token) die eine identifikation für unseren aktuellen Login darstellt. Diese Zeichenkette sollte wir immer aus der vorherigen Abfrage übernehmen. In der API Dokumentation können wir sehen, welche Daten wir dem Request noch anfügen müssen. Ist der Request erstellt senden wir diesen über den entsprechenden Webservice an die Betfairseite und erhalten eine Rückgabe/Respone die wir dann auswerden können.

Eine kleine Anmerkung vorweg. Der Array wird bei im Beispielcode am Anfang mit vorgegebener Größe erstellt. Das ist nicht gerade schön und sollte noch so verändert werden, dass dieser erst nach Ermittlung der notwendigen Größe erstellt wird. Es sind ca. 10.000 Märkte auf Betfair. Zum ausprobieren sollte es also auch mit meinem Codebeispiel klappen.

Hier also der Java Code mit dem wir alle Märkte auf Betfair erfragen:

// Ergebnisarray
        String[][] output = new String[20000][20];

        // Felder Beschriftung
        final int MARKETID = 1;
        final int MARKETNAME = 2;
        final int MARKETTYPE = 3;
        final int MARKETSTATUS = 4;
        final int EVENTDATE = 5;
        final int MENUPATH = 6;
        final int EVENTHIERARCHY = 7;
        final int BETDELAY = 8;
        final int EXCHANGEID = 9;
        final int ISO3COUNTRYCODE = 10;
        final int LASTREFRESH = 11;
        final int NUMMBEROFRUNNERS = 12;
        final int NUMMBEROFWINNERS = 13;
        final int TOTALAMOUNTMATCHED = 14;
        final int BSPMARKET = 15;
        final int TURNINGINPLAY = 16;

        // Exchange Service
        BFExchangeService_Service bFExchangeService_Service = new BFExchangeService_Service();
        BFExchangeService bFExchangeService = bFExchangeService_Service.getBFExchangeService();

        // Get Markets
        GetAllMarketsReq getAllMarketsReq = new GetAllMarketsReq();
        com.betfair.publicapi.types.exchange.v5.APIRequestHeader newHeader = new com.betfair.publicapi.types.exchange.v5.APIRequestHeader();
        newHeader.setSessionToken(sessionToken);
        getAllMarketsReq.setHeader(newHeader);
        GetAllMarketsResp getAllMarketsResp = bFExchangeService.getAllMarkets(getAllMarketsReq);

        if (getAllMarketsResp.getErrorCode().equals(GetAllMarketsErrorEnum.OK)) {
            // Market Data
            String marketData = getAllMarketsResp.getMarketData();
            String[] splitMarkets = marketData.split(":");

            int i = 0;
            for (String part1 : splitMarkets) {

                String[] splitMarket = part1.split("~");

                int j = 1;
                for (String part2 : splitMarket) {

                    output[i][j] = part2;

                    j++;

                }

                i++;
            }

            // Beispielanwendung
            // Suchen nach Pferderennen im Menüpfad:
            CharSequence suche = "Pferdergennen";
            for (String[] test : output) {
                if (test[MENUPATH] != null) {
                    if (test[MENUPATH].contains(suche)) {
                        System.out.println("Marktid: " + test[MARKETID]);
                    }
                }
            }

        } else {
            System.out.println("Get All Markets Error: " + getAllMarketsResp.getErrorCode());
        }

Am Anfang lege ich finale Variabeln fest die mit ihrem Namen bestimmte Eigenschaften der Märkte repräsentieren. Dies dient einzig und alleine zur besseren Übersicht für den Programmierer. Seht euch dazu Table 13-3: marketData in der Betfair API Dokumentation an.

Als nächstes erstelle ich mir den entsprechenden Webservice über den ich die GetAllMarkets Anfrage an den Betfairserver senden werde. Dies geschiet auf die selbe weise wie beim Login, nur dass hier der Exchange Service und nicht der Global Service angesprochen wird. Bei einer komplexeren Anwendung könnt ihr die beiden Service an einem zentralen Punkt erstellen und immer wieder darauf zugreifen.

Danach erstelle ich eine GetAllMarkets Anfrage. Dieser muss nur der Header übergeben werden, der wie schon erwähnt den Session Token beinhaltet. Also erstell ich mir einen neuen Header und weise ihm den SessionToken zu. Den Session Token bekommt ihr von der letzten Antwort des Servers. Also zum Beispiel:

sessionToken = loginResp.getHeader().getSessionToken();

Ich erstelle hier im Beispiel einen neuen Header, da der Loginheader einen anderen Typ hat. Ansonsten müsste es auch gehen, den Header aus der Loginantwort zu übernehmen.
Es folgt die eigentlich Anfrage nach dem oben beschrieben Schema. Wie beim Login wird Antwort anhand des Error Codes geprüft.

War die Anfrage erfolgreich bekommen wir mit der Methode getMarketData() aus der Antwort einen elend langen String der alle Märkte mit Trennzeichen(Delimiter) getrennt enthält. Zuerst splitte ich im Beispiel die einzelnen Märkte auseinander und dann die einzelnen Informationen zu den Märkten und speichere das ganze in dem vorbereiteten Array. Jetzt hab ich einen Array bei dem der erste Wert als eine Art ID genutzt wird, und ein weiterer Zähler der die einzelnen Informationen zu den Märkten anspricht. Wir können nun also mit den einzelnen anfangs angelegten Variabeln bequem und gezielt die verschiedenen Eigenschaften der Märkte aufrufen.

Im Code findet ihr ein kleines Anwendungsbeispiel, das alle Märkte nach dem Wort Pferderennen im Menüpfad durchsucht und deren ID ausgibt:

  // Beispielanwendung
            // Suchen nach Pferderennen im Menüpfad:
            CharSequence suche = "Pferdergennen";
            for (String[] test : output) {
                if (test[MENUPATH] != null) {
                    if (test[MENUPATH].contains(suche)) {
                        System.out.println("Marktid: " + test[MARKETID]);
                    }
                }
            }

Nun könnt ihr nach herzenslust die Märkte Filtern und mit der MarktID weiter auf den Markt eingehen, was ich in einem späteren Tutorial zur Betfair API Programmierung erläutern werde.

Betfair API mit Java und Netbeans (Teil1) – Anleitung/Tutorial – Netbeans einrichten

Hier der wie angekündigt erste Teil zur Anleitung “Betfair API mit Java und Netbeans” in dem ich euch erklären werde wie ihr die Entwicklungsumgebung Netbeans für die Betfair API fit macht. Wenn ihr Netbeans noch nicht auf eurem Rechner installiert habt, könnt ihr es euch auf folgender Seite kostenlos herunterladen:

http://netbeans.org/downloads/ (Java,  ca.214MB)

Nach der installation von Netbeans müsst ihr ein neues Projekt anlegen ( File -> New Project -> Categorys: Java,  Projects: Java Application ) und diesem dann mittels WSDL Dateien mitteilen wie euer Java Programm mit der Betfair API kommunizieren soll. Dazu geht ihr wie folgt vor:

Ladet euch folgende WSDL Dateien herunter:

  • https://api.betfair.com/exchange/v5/BFExchangeService.wsdl
  • https://api.betfair.com/global/v3/BFGlobalService.wsdl
Webservices anlegen in Netbeans

Webservices anlegen in Netbeans

Geht wieder in das File Menü, diesmal aber New File. Wählt im sich öffnenten Menü die Kategory Web Services aus und als Datei Typ Web Service Client.

Nach einem Klick auf Next wählt ihr Local File aus und klickt auf Browse um einen Dateimanager zu öffnen in dem ihr zuerst die eine WSDL Datei und dann mit dem komplett selben Vorgang die andere in euer Projekt ladet.

  • Achtung: Wenn ihr die Dateien in dem Dateimanager nicht findet, dann wählt eventuell als Dateityp “Alle Dateien” aus oder gebt in das Feld für den Dateinamen “*.xml” um nach den Dateien zu Filtern.

Sind beide Dateien in das Projekt geladen, müssen wir unser Programm, das wir schreiben wollen nur noch darauf hinweisen wo sich die geladenen Dateien, bzw. die daraus generierten Packages befinden.

Das machen wir jetzt mal ganz “dirty” indem wir einfach alles Importieren (folgenden Code zwischen dem Package Befehl und der Main Klasse):

import com.betfair.publicapi.types.exchange.v5.*;
import com.betfair.publicapi.types.global.v3.*;
import com.betfair.publicapi.v3.bfglobalservice.*;
import com.betfair.publicapi.v5.bfexchangeservice.*;

Damit sind alle Vorbereitungen abgeschlossen und wir können im nächsten Tutorial zur Betfair API und Netbeans damit beginnen uns bei Betfair über die API einzuloggen.

Betfair, Java und Netbeans – Eigene Wettsoftware mit der Betfair API entwickeln.

Mit dem BfExplorer hab ich es schon versucht, möglichst frei, eigene Betfair Software zu entwickeln. Leider hat es da nicht so geklappt, wie ich es mir erhofft hatte, was verschiedene Gründe hat. Zum einen war es mir zu undurchsichtig, einfach zu wenig transparenz gegeben. Die fehlende Dokumentation und meine fehlenden Kenntnisse in den .Net Programmiersprachen machten es schwierig etwas auf die Beine zu bekommen. Auch wenn es für die Betfair Api Programmierung wenige Anleitungen gibt, so ist wenigstens die Schnittstelle dokumentiert und man unterliegt auch keinen Zeit und Kosten Druck wie beim BFExplorer.

Java kann ich zwar auch nicht perfekt, aber deutlich besser als C# oder VB.  Ganz einfach fällt mir der Einstieg in die Java Betfair API Programmierung auch nicht, weshalb ich hier in nächster Zeit die ersten Schritte dokumentieren werde.

Schritte die ich bereits geschaft habe einigermassen funktionierend umzusetzen sind:

  • Netbeans für die Betfair API einrichten, WSDLs* einbinden
  • Über ein JAVA Programm bei Betfair einloggen
  • Eine Wette platzieren
  • Märkte auflisten

*WSDL beudeutet Web Services Description Language, was eine Sprache ist, die eine Schnittstelle Programmiersprachenunabhängig beschreibt. Viel mehr muss man dazu auch nicht wissen … ;-)

Wie das ganze gemacht werden muss, hab ich mir aus verschiedenen Seiten zusammengekratz. Zum einen gibt es ein recht nettes Tutorial zum Thema Betfair API mit Netbeans und Java im offiziellen Betfair Entwickler Forum (1)(2)(3)(4). Dann gibt es noch einen interessanten Blog wo die Beispiele sehr hilfreich aber nicht ganz schlüssig sind. Zuguter letzt lerne ich natürlich viel aus der offiziellen Dokumentation der Betfair API.

Ihr dürft also gespannt sein auf mehr oder weniger interessante Tutorials und Anleitungen die euch der Programmierung einer eigenen Wettsoftware oder eines Betfair Bots näher bringt.