• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

API Abrage - Cache - MySQL?

taito

Neues Mitglied
Guten Tag liebe Community,

ich bin derzeit ein klein wenig hilflos, da ich bisher an einem Projekt, Web technisch alles lösen konnte. Nur jetzt wird es für mich zu knifflig wo ich nicht weiterkomme. Ich arbeite an der Webseite von einem Livestreamer, der über Twitch.TV streamt. In der Sidebar meiner Webseite habe ein PHP-Script eingebaut, welches über die Twitch API abfragt, ob der Stream Online ist, oder nicht. Wenn er Online ist, wird der Livestream eingebunden auf der Webseite eingebunden. Dies funktioniert nahezu perfekt. Das Problem dabei ist das jedes mal wenn die Seite aufgerufen wird, eine neue API-Abfrage gestartet wird, und somit die Ladezeit unnötig in die länge zieht. Desweiteren sind die Webseiten aufrufe groß, weshalb wir zum teil aus der API wegen übermengen an Abfragen zeitweise ausgesperrt werden. Das führt dazu es manchmal zu Seiten-Ladezeiten von 15-30 Sekunden kommt.

Ich konnte mich schlau lesen, das eine Caching Funktion das beste wäre, oder eine MySQL Tabelle. Vorgestellt hab ich mir das in etwa so:


  1. Wenn Seite geladen wird --> Cache auslesen / MySQL abfrage.
  2. Timestamp überprüfen.
  3. Wenn veraltet: (Variable XY) API Abfrage starten und Cache / MySQL aktualisieren und zurück zum Anfang.
  4. Wenn nicht: Player anzeigen Wenn Status Online.

Mein bisheriger Code-Schnipsel:

PHP:
<!-- STREAM --><p>	<?php // Live Stream wenn Online 		$data = json_decode(file_get_contents("https://api.twitch.tv/kraken/streams/**Name zensiert**"));		if($data->stream) {  ?>                   	<object type="application/x-shockwave-flash" height="163" width="268" id="live_embed_player_flash" data="http://www.twitch.tv/widgets/live_embed_player.swf?channel=**Name zensiert**" bgcolor="#000000"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="allowNetworking" value="all" /><param name="movie" value="http://www.twitch.tv/widgets/live_embed_player.swf" /><param name="flashvars" value="hostname=www.twitch.tv&channel=**Name zensiert**&auto_play=true&start_volume=01" /></object>                        	<?php } ?></p><!-- STREAM END -->

Würde mir jemand dabei behilflich sein, das passende Script zu schreiben?
 
Werbung:
Was du mit file_get_contents erhälst kannst du mit file_put_contents einfach in eine Datei schreiben.

Bei jeden Aufruf kannst du die Datei mit filemtime() auf ihr Alter überprüfen. Ist dass älter wie z.b. 10 Minuten, frage die API ab, und speichere es wieder wie oben geschrieben zwischen. Ansonsten kannst du die Daten von deinem Cachefile nehmen, was du mit putcontents geschrieben hast.

Alternativen zum Cachefile wäre ein Datenbank Eintrag. In Beiden Fällen könntest du auch im Hintergrund einen Cronjob laufen lassen, der entweder die Datenbank updated oder dein Cachefile.
 
Zurück
Oben