moTo: Serverseitige XMLHttpRequest in Datenbank speichern

Hallo zusammen,
ich bräuchte bei dem folgenden Thema mal euren Rat:

Ich habe einen Javascript Code auf meiner HP eingebunden, der Clientseitig XMLHttpAnfragen an einen API Server stellt. Dieser API Server liefert aktuelle Wechselkurse zwischen zwei Crypto-Währungen.

Die Anfrage liefert einen String mit verschiedenen Werten zurück (kein xml Format und auch nicht auf einen Wert anpassbar). Diesen String habe ich mit JS so geparst dass ich nur noch einen Wert übrig habe. Habe das ganze noch mit einem Intervall versehen, sodass ich nun aktuelle Wechselkurse angezeigt kriege, ohne die Seite neu zu laden.

Nun möchte ich mit den Werten eine Statistik erstellen, dh. den Wert einmal alle X Sekunden abfragen, parsen und mit einem Zeitstempel in eine MySQL Datenbank schreiben.

Ich habe bisher immer nur mit Javascript, HTML und CSS gearbeitet und noch kaum Erfahrung mit PHP.
Nun also zur Frage:
Ist es möglich, dass ich mit PHP eine Abfrage erstelle, die Clientunabhängig läuft und die empfangenen Daten alle x Sekunden in die Datenbank schreibt?

Danke schon mal im Voraus!
Beste Grüße,

  1. Ist es möglich, dass ich mit PHP eine Abfrage erstelle, die Clientunabhängig läuft und die empfangenen Daten alle x Sekunden in die Datenbank schreibt?

    Ja und nein.

    Dein Skript muss in irgendeiner Form ständig laufen (dazu gehört auch das Warten), um eine Aufgabe regelmäßig zu erledigen. Der PHP-Interpreter kann zwar grundsätzlich auch eigenständig laufen, wird aber in aller Regel als Anhängsel des Webservers eingesetzt, d.h. ein Browser ruft eine URL auf, der Webserver stellt fest, dass er unter dieser URL ein PHP-Skript ausführen soll und lädt dieses Skript in seinen eingebauten PHP-Interpreter zur Ausführung. Das ist also Aktivität auf Browseranforderung, keine eigenständige.

    Du wirst erstmal klären müssen, ob du die Möglichkeit hast, Skripte eigenständig laufen zu lassen. Bedienst du dich eines Hosting-Angebots, wird das nur der Fall sein, so im Angebot sogenannte cronjobs enthalten sind. Ein cronjob ist quasi ein Wecker, der zu bestimmten Zeiten Programme ausführen kann (hier: dein Skript).

    Gibt es eine Möglichkeit, solltest du weiterhin klären, ob du PHP eigenständig ausführen kannst oder auf eine andere Sprache zurückgreifen musst, Python oder Perl beispielsweise.

    Und dann kannst du dich um das eigentliche Problem kümmern, nämlich wie in der gewählten Sprache XHR (XMLHTTPRequest) am schlauesten ausgeführt wird.

    1. Erstmal vielen Dank für eure Antworten!

      Gibt es denn auch eine andere Möglichkeit, diese Werte zu speichern, wenn Skripte nicht eigenständig laufen? Z.B. dass durch den Aufruf der Website automatisch der aktuelle Wert aus der XMLHttp Abfrage in die Datenbank geschrieben wird? Müsste natürlich irgendwie limitiert werden, z.B. maximal ein Eintrag pro Minute oder so.

      Ist so was möglich und wenn ja, wie müsste das umgesetzt werden?

      Danke und beste Grüße

      1. Gibt es denn auch eine andere Möglichkeit, diese Werte zu speichern, wenn Skripte nicht eigenständig laufen? Z.B. dass durch den Aufruf der Website automatisch der aktuelle Wert aus der XMLHttp Abfrage in die Datenbank geschrieben wird?

        Es ist grundsätzlich kein Problem, beim Aufruf einer Seite noch irgendwas anderes als die Ausgabe der Seite zu erledigen (sinnigerweise am Ende des restlichen Codes, du möchtest die Seitenausgabe nicht unnötig verzögern). Du bist dann aber logischerweise von den Seitenaufrufen abhängig, was …

        z.B. maximal ein Eintrag pro Minute oder so.

        … problematisch werden könnte, wenn du so kleine Schritte ins Auge gefasst hast. Manche Angebote werden zwischen Mitternacht und fünf Uhr am Morgen praktisch überhaupt nicht aufgerufen, ergo hättest du da ein riesiges Loch in deiner Statistik.

        Wie du das nun mit PHP genau anstellst, hängt zum einen von der API des Dienstes und zweitens von der Datenbank ab. In der PHP-Anleitung kannst du rechts oben nach deiner Wunsch-Datenbank suchen. Was die API angeht, hat der Anbieter des Dienstes vielleicht selbst Beispielcode für PHP.

  2. hi,

    Ich habe einen Javascript Code auf meiner HP eingebunden, der Clientseitig XMLHttpAnfragen an einen API Server stellt. [..]

    Die Anfrage liefert einen String mit verschiedenen Werten zurück (kein xml Format und auch nicht auf einen Wert anpassbar).

    Reden wir von JSONP? Bei JSONP würdest Du dem Request eine Callbackfunktion mitgeben, die, nachdem von der API (not same origin) mit Argumenten befüllt, in Deinem Client ausgeführt und das Ergebnis ins DOM gerendert wird.

    Diesen String habe ich mit JS so geparst dass ich nur noch einen Wert übrig habe.

    Ist es möglich, dass ich mit PHP eine Abfrage erstelle, die Clientunabhängig läuft und die empfangenen Daten alle x Sekunden in die Datenbank schreibt?

    Freilich kannst Du auch mit PHP einen UserAgent implementieren wobei der periodische Aufruf eine andere Sache ist und eine andere, weitere Möglichkeit darin besteht, das Script als Dienst laufen zu lassen.

    Unabhängig von PHP kannst Du zunächst in der Dokumentation zur API nachlesen, wie der Request auszusehen hat (Method, URL, Parameter) und wie die Daten in der Response verpackt sind (XML, JSON, Andere). Abhängig von der Wahl Deiner Script/Programmiersprache siehst Du dann, welche Library einzubinden ist, um den wahlfreien Zugriff auf die Daten zu realisieren.

    Beispiel: PayPal NVP API und UserAgent mit Perl.

    MfG

  3. Hallo,

    Du könntest den API-Aufruf über eine eigene PHP-Datei realisieren, welche einen entsprechenden Request absetzt, die Antwort auswertet, in die DB schreibt und den Wert zurückgibt. Diese Datei rufst Du dann via Xmlhttprequest auf (anstelle des direkten API-Aufrufs).

    Grüße Basti

  4. Ist es möglich, dass ich mit PHP eine Abfrage erstelle, die Clientunabhängig läuft und die empfangenen Daten alle x Sekunden in die Datenbank schreibt?

    PHP-Skripte unterliegen normalerweise Laufzeitbeschränkungen (Standard: 30sec). Aus Sicherheits- und Performance-Gründen. Damit das trotzdem läuft könntest du Cronjobs verwenden. Wenn dein Hoster dieses Feature nicht unterstützt gibt es auch kostenlose Anbieter. Ich hab jetzt leider keine Adresse parat, aber bei einer Suchmaschine deiner Wahl solltest du fündig werden.

    Das kleinste Zeitintervall, das ich bei kostenlosen Angeboten finden konnte waren 15 Sekunden, aber das sollte für deine Anwendung reichen.

    Den Rest, die eigentliche Abfrage würd' ich mit cURL realisieren. Mit cURL kanst du auch einen XMLHttpRequest realisieren.

    Wenn du noch nie mit PHP was zu tun hattest ist das kein leichtes Unterfangen. Cronjobs, cURL - XMLHttpRequest, evtl. MySQL ... da bist du schon recht sportlich unterwegs...

    lg
    mark