#1 10. November 2011 Bestimmten Teil einer Homepage auslesen. Hallo Leute, Undzwar möchte ich mithilfe von PHP den Online Status der Battlefield 3 Server auslesen. Mit welcher Funktion würde ich das machen? Vorallem, die Seite um die es sich handelt: Battlefield 3 - Server Status - EA Dort wird die Seite alle 60 Sekunden refreshed. Wäre es möglich dann die PHP die Sachen auszulesen -> An ein HTML Formular weiterzuleiten was z.b. ein Bild oder überhaupt den Status anzeigt? (dieser Teil soll dann per Ajax alle 65 Sekunden refreshed werden. All das möchte ich in mein Woltlab Burning Board integrieren. Mit welchen Funktionen von PHP sollte ich dabei arbeiten? Wo kann ich mit "einlesen" bzgl. Ajax? Grüße + Multi-Zitat Zitieren
#2 10. November 2011 AW: Bestimmten Teil einer Homepage auslesen. Das kannst du einfach mit einem regulären Ausdruck. Alle drei Mal wird der selbe HTML-Code benutzt: Code: <div class="server-status server-up">Up</div> Es wär natürlich noch gut zu wissen, wie der Code für "down" aussieht, aber dir es sollte dir genügen, folgendes auszulesen: Code: <div class="server-status ...">...</div> Das zweite "..." gibt dir vermutlich "Up" oder "Down" zurück, et voila Wenn du das ganze mit einem Banner machen willst, würde ich versuchen, das ganze zu cachen. Sonst hast du pro Besucher (pro 60 Sekunden) den Aufruf der PHP-Datei, wobei es langt, wenn man es einmal alle 60 Sekunden überprüft (und nicht x mal bei x Besuchern). + Multi-Zitat Zitieren
#3 10. November 2011 AW: Bestimmten Teil einer Homepage auslesen. Eine API scheint es leider nicht zu geben, wenn das Origin-Programm den Status anzeigen lassen kann dann sollte man am besten den HTTP-Request sniffen um eine Sicherere Abfrage zu realisieren. Wer keine Schriftliche Erlaubnis vom Seitenbetreiber hat sollte bei dem Crawlen von Fremden Informationen vorsichtig sein! Dieser Code-Snippsel dient nur zur Demonstration. PHP: <? PHP $ea_server_status_url = 'http://www.ea.com/servers/battlefield3' ; // need allow_url_fopen = ON $html = file_get_contents ( $ea_server_status_url ); preg_match_all ( '!server-status server-(volitile|up|down)\"\>([^\<]*)\<\/!i' , $html , $matches ); echo '<pre>' . print_r ( $matches , true ) . '</pre>' ; if( count ( $matches [ 1 ]) != 4 ){ // Sollte etwas schieflaufen dann cache nutzen? echo 'Struktur der Webseite wurde geändert!' ;}else{ // Ergebnis in Variablen zerlegen list( $ea_xboxlive , $ea_playstationnetwork , $ea_pcgameservers , $ea_battlelog ) = $matches [ 1 ]; echo '<li>Xbox Live is ' , $ea_xboxlive , '</li>' , '<li>Playstation Network is ' , $ea_playstationnetwork , '</li>' , '<li>PC Game Servers is ' , $ea_pcgameservers , '</li>' , '<li>Battlelog is ' , $ea_battlelog , '</li>' ;} //Edit 15:19 Status "volitile" hinzugefügt + Multi-Zitat Zitieren
#4 10. November 2011 AW: Bestimmten Teil einer Homepage auslesen. Danke dir Nanobyte das hat mir schonmal die Augen geöffnet. Besteht die Möglichkeit die php als iframe einzubinden? Dann muss ich mir keine Sorgen machen wie ich es ins WBB3 bekomme. Wie ich die Variablen auslese und mit Grafiken ersetze sollte ich hinbekommen. Danke euch. + Multi-Zitat Zitieren
#5 10. November 2011 AW: Bestimmten Teil einer Homepage auslesen. Wenn du es über PHP als Bild ausgibst, kannst es doch einfach auch als Bild aufrufen. Wenn du beim WBB3 Probleme hast, Bilder darzustellen, die die Endung .php (glaube das gabs mal, kann auch beim 2er gewsen sein) darzustellen, kannst du es über .htaccess regeln, dass du bei upstatus.jpg die upstatus.php aufrufst. + Multi-Zitat Zitieren
#6 10. November 2011 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: Bestimmten Teil einer Homepage auslesen. Ich habe hier noch ein Komplettes Script fertig gemacht das ein Bild als Status ausgibt. Das ganze ist Ausbaufähig Server-Status als Bild Cache .htaccess (Mod_rewrite) Benutzung: /ea-server/battlelog.png /ea-server/?battlelog.png Die 4 Icons stammen von FamFamFam.com Download: ea-serverstatus.zip (4,27 KB) (/ea-server/index.php) PHP: <? PHP$request = $_SERVER [ 'QUERY_STRING' ]; $cache_dauer = 1 ; $dirCache = 'cache/' ; $ea_server_status_url = 'http://www.ea.com/servers/battlefield3' ; $images = array( 'up' => 'famfamfam.com/tick.png' , 'down' => 'famfamfam.com/cross.png' , 'volitile' => 'famfamfam.com/bullet_error.png' , 'unknown' => 'famfamfam.com/exclamation.png' ); switch( $request ){ case 'xboxlive' : case 'xboxlive.png' : $server = 'xboxlive' ; break; case 'playstation' : case 'playstationnetwork' : case 'playstationnetwork.png' : $server = 'playstationnetwork' ; break; case 'pcgameserver' : case 'pcgameserver.png' : $server = 'pcgameserver' ; break; case 'battlelog' : case 'battlelog.png' : $server = 'battlelog' ; break; default: // Nicht verfügbar header ( 'Content-Type: image/png' ); readfile ( $images [ 'unknown' ] ); exit;} $serverCacheFile = $dirCache . 'ea.battlefield.cache' ; if( file_exists ( $serverCacheFile ) ){ $cache_last_change = filemtime ( $serverCacheFile );}else{ $cache_last_change = $_SERVER [ 'REQUEST_TIME' ];} if( ! file_exists ( $serverCacheFile ) OR ( $cache_last_change +( $cache_dauer * 60 )) <= $_SERVER [ 'REQUEST_TIME' ] ){ // Cache abgelaufen, neue Daten holen! // need allow_url_fopen = ON $html = file_get_contents ( $ea_server_status_url ); preg_match_all ( '!server-status server-(volitile|up|down)\"\>([^\<]*)\<\/!i' , $html , $matches ); if( count ( $matches [ 1 ]) == 4 ) { // Ergebnis in Variablen zerlegen list( $ea_xboxlive , $ea_playstationnetwork , $ea_pcgameservers , $ea_battlelog ) = $matches [ 1 ]; $servers = array( 'xboxlive' => $matches [ 1 ][ 0 ] , 'playstationnetwork' => $matches [ 1 ][ 1 ] , 'pcgameserver' => $matches [ 1 ][ 2 ] , 'battlelog' => $matches [ 1 ][ 3 ] ); } file_put_contents ( $dirCache . 'ea.battlefield.cache' , serialize ( $servers ) ); }else{ // Laden daten aus dem Cache $servers = unserialize ( file_get_contents ( $dirCache . 'ea.battlefield.cache' ) ); } $exp_gmt = gmdate ( 'D, d M Y H:i:s' , time () + $cache_dauer * 60 ) . ' GMT' ; $mod_gmt = gmdate ( 'D, d M Y H:i:s' , $cache_last_change ) . ' GMT' ; header ( 'Expires: ' . $exp_gm ); header ( 'Last-Modified: ' . $mod_gmt ); header ( 'Cache-Control: private, max-age=' . $cache_dauer * 60 ); // Speziell für MSIE 5 header ( 'Cache-Control: pre-check=' . $cache_dauer * 60 , FALSE ); header ( 'Content-Type: image/png' ); readfile ( $images [ $servers [ $server ]] ); + Multi-Zitat Zitieren