[PHP] Bestimmten Teil einer Homepage auslesen.

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Die_Quelle, 10. November 2011 .

  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
     
  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).
     
  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 ]) !=  )
    {
        
    // 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
     
  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.
     
  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.
     
  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 ]) ==  )
        {
            
    // 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 ]] );
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.