Bundesliga API auslesen

  • Hallo zusammen,
    ich verzwifel hier gerade. Ich versuche einen Liveticker für die Bundesliga zu basteln. Ich will dafür die Ergebnisse JSON-API von http://www.openligadb.de nutzen. Ich bin da absoluter newbie und hab mal ein bisschen rumgetestet. Bei den Daten ww.wopenweathermap.org klappt das ganze wunderbar. Aber die Bundesliga Daten scheinen irgendwie eine andere Struktur zu haben - an der ich komplett verzweifel....


    Ich hab in dem Code den Wetter-Schnippsel mal auskommentiert drin gelassen. Wenn ich den Bundesliga abruf analog aufbaue, funktioniert das jedoch nicht. Die einzelnen Spiele scheinen in einzelnen arrays(?) aangeordnet zus ein, die ich nicht angesprochen bekomme...
    Habt Ihr ein Idee?



  • Hallo dude76,


    mit den Programmierbeispielen, die auf der von Dir angegebenen Seite enthalten sind, kommst Du nicht weiter?


    Sieht eigentlich nicht so schwierig aus, die drei aufgeführten Zeilen in andere Programmiersprachen zu übertragen.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hi,


    solange der Server nicht definiert wer auf die API zugreifen darf, wird das mit Javascript nichts. Liegt einfach an der CSP.


    Openweather definiert den Zugriff global, deswegen funktioniert das dort. Ein Vergleich der http-Header zwischen openweather und openliga:


    [Blocked Image: http://abload.de/img/openweathermapjppih.jpg][Blocked Image: http://abload.de/img/openligadbyupnr.jpg]


    Der Server muss mittels dem Header Access-Control-Allow-Origin den Zugriff erlauben, sonst klappt das nicht. Und das fehlt bei openligadb.


    Du hast jetzt nur zwei Möglichkeiten:


    • Du nimmst Kontakt zu openligadb.de auf und beschreibst die Problematik und sie beheben das Problem. Ich denke die werden gewillt dazu sein, schließlich möchten sie ja dass man ihre API benutzt. Also einfach eine nette E-Mail schreiben :)
    • Du schreibst in Python ein kleines Script welches lediglich die Seite aufruft und den Content zurückgibt. Vielleicht auch so, dass du mittels Python einen kleinen Webserver startest und alle Anfragen auf openligadb weiterleitest, dann wäre mittels Javascript ein zugriff wie "getJSON('http://localhost:5555/api/getmatchdata/bl1/2014/15')" möglich ;)


    Ich würde erstmal Möglichkeit 1 ausprobieren und wenn die das nicht wollen, dann greif zu 2.


    Grüße

  • Hi,


    Eine weitere Möglichkeit wäre dafür YQL(YAHOO Query Language) zu verwenden. Damit kann man recht einfach die SOP umgehen indem man YQL quasi als Proxy verwendet.


    Ist allerdings schon ne ganze Weile her seit ich das verwendet hab und leider kenn mich auch mit js generell nicht so gut aus aber auf den Seiten von YAHOO(die betreiben diesen Service) findet man viele gute Infos dazu. (Bzw. über google: http://christianheilmann.com/2…jax-using-jquery-and-yql/)


    Yahoo bietet auch einen Service(YQL Console) an mit dem man das ganze online im Browser testen kann:
    http://developer.yahoo.com/yql…m%20html%20where%20url%3D'www.openligadb.de/api%2Fgetmatchdata%2Fbl1%2F2014%2F15'&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys


    Der Link der dabei "herausfällt" sieht dann in etwa so aus:
    https://query.yahooapis.com/v1…m%20html%20where%20url%3D'www.openligadb.de/api%2Fgetmatchdata%2Fbl1%2F2014%2F15'&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=

    DON'T PANIC!

    Edited once, last by joh.raspi ().

  • Hallo zusammen,
    besten dank für die Infos. Da ich wirklich blutiger Anfänger bin, verstehe ich immmer nur die Hälfte :)
    Mein API Abruf funktioniert also nicht, weil von das server seitig blockiert wird. Wenn man ein wenig googelt scheint das nicht ungewöhnlich zu sein. Es gibt verschiedene Workarounds zu dem Problem:
    -Die openliga dudes stellen bei sich den API Service um. Ich denke aber, dass die das aus irgendeinem Grund tun, und ausserdem möchte ich lernen, von daher ist für mich erstmal Plan b.
    -Ein "Umweg" über yql. Sieht mir sehr elegant aus. Allerdings scheint die dort zusammengestellte API Struktur nicht ganz "gesund" zu sein. Im Moment komm ich da nicht wirklich weiter.
    -jsonp soll da auch helfen, birgt allerdings wohl auch Sicherheitsrisiken. Dennoch ist das im Moment mein Favourit. Da ich Anfänger bin, kann ich nicht wirklich abschätzen, ob ich da auf dem Holzweg bin.... kann jemand von "Profis" abschätzen ob das klappt? Ich weil kein fertigen Code von Euch, allerdings fände ich es super wenn mir vorher Bescheid sagt, ob ich da totalen Quatsch vorhabe :)


    Beste Dank und Gruß

  • Also noch einmal - der Server blockiert den Aufruf nicht. (* heißt, alle dürfen)
    Json ist dafür ausgelegt, Daten vom eigenen Server zu empfangen.
    Du versuchst Daten von einem anderen Server zu empfangen.
    Deshalb solltest du kein json sondern jsonp nutzen.
    Der Umweg über yql löst das Grundsatzproblem nicht.
    Schau bitte einfach die links von mir an, speziell der zweite ist fast fertiger Code für dich.

  • Hi Thomas,
    danke für Deinen Tipp, allerdings hilft mir das nicht so richtig weiter. Ich hab einiges mit jsonp experimentiert, aber ich komme da auf keinen grünen Zweig. Unten ein Stück code, den zusammenstoffelt habe. Hat jemand eine Idee was ich falsch mache?


    Gruß,
    dude


  • Bei JSONP musst du die URL als Script-Tag ins Dokument einfügen (kann auch dynamisch gemacht werden).


    Im Dokument muss dann sowas wie


    Code
    <script src="http://www.openligadb.de/api/getmatchdata/bl1/2014/15?jsonp=parseResponse"></script>


    stehen.


    Aber das wird bei openligadb nicht funktionieren, JSONP muss auch vom Server behandelt werden. Der einzige Weg ist und bleibt eine Anfrage bei openligadb zwecks dem "Allow-Origin" oder der "Umweg" über ein Proxy.



    Also noch einmal - der Server blockiert den Aufruf nicht. (* heißt, alle dürfen)


    Nicht der Server, sondern der Browser.

  • Moin Patlux,
    besten Dank für den Service :) Bei mir war das Projekt etwas in Vergessenheit geraten, da die Saison ja eh durch war... Ich hab gerade mal ein bisschen experimentiert - funktioniert perfekt!


    Besten Dank nochmal & Gruß
    Dude