kostenloser Webspace werbefrei: lima-city


Nur bestimmte Daten von HP auslesen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    Hallo Leute

    Ich scripte gerade an einer Gildenhomepage (eigentlich Legion) und möchte für das Bewerbungsformular prüfen, ob der Nickname im Spiel auf dem Server vorhanden ist.
    Jetzt kann man den Nick auf der Spielhomepage suchen und bekommt den dann entsprechend angezeigt...

    http://search.de.aiononline.com/aion/main.jsp?query=Elu&where=aionweb%5Euser&zone=00&fex1=47

    Das ganze sieht dann so aus... jetzt möchte ich vom obersten Charakter (Elu - Stufe 31) die entsprechenden Daten auslesen... wie mache ich das genau??? ich baue eine Verbindung mit der Homepage auf und wie lese ich dann genau das aus, was ich haben will???

    Gruß
    Technofan

    PS: in dem gebiet mit HPs auslesen bin ich ne niete, bitte so genau wie möglich erklären.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Na, so richtig firm bin ich im Auslesen anderer Seiten auch nicht, aber ich glaube, es müsste über fopen() funktionieren. Man kann als File-Adresse eine URL übergeben und somit den HTML-Stream einer anderen Seite abfangen. Ich bin mir nicht absolut sicher, ob ein fopen mit einer URL auch unter lima-city möglich/erlaubt ist, aber die PHPinfo() zeigt mir zumindest den Parameter "allow_url_fopen" als "On" an ...

    Nachdem Du die entfernte Seite mit
    $fp=fopen($url,'r');
    geöffnet hast, kannst Du den gesamten (html-)Inhalt mit
    $inhalt=fread($fp,100000);
    auslesen. ABER - ausgetestet habe ich das nicht. Ich habe jedoch durchaus schon mit fopen Dateien über ftp-Protokoll geöffnet ...

    WENN Du das Seiten-HTML einlesen kannst, so bleibt Dir natürlich immer noch die Aufgabe, die Dich interessierenden Informationen herauszufiltern. Das ist eine klassische Aufgabe für regular expressions. Allgemeine Formeln gibt es nicht dafür, aber nachdem ich mir den Seitenquelltext einmal angesehen habe, fiel mir auf, dass jeder Charakter in einer eigenen tabelle angezeigt wird. Die Struktur darin ist immer gleich (hurra!!!), so dass ich den folgenden Code zusammengeklimpert habe der (mit meiner lokal als .html-File abgespeicherten und wieder eingelesenen Seite) funktioniert hat:
    $ret="\r\n";
    $fp=fopen('elu.html','r');
    $txt=fread($fp,100000);  // alles einlesen
    $txt=eregi_replace('<table>','|@|',$txt);      // Abschnittsmarken setzen
    $txt=substr($txt,0,strrpos($txt,'</table>'));  // alles hinter der letzten Tabelle löschen
    
    $txt=eregi_replace('</?[^>]*>','',$txt);       // alle html-Tags entfernen
    $txt=eregi_replace("[\t]*",'',$txt);           // tabs (falls vorhanden) löschen
    $txt=eregi_replace("[$ret][$ret]+",$ret,$txt); // mehrfache Zeilenschaltungen löschen
    $txt=eregi_replace("\n +","\n",$txt);          // Blanks am Zeilenanfang löschen  
    $a=array_slice(explode('|@|',$txt),1);         // Textstring an den Abschnittsmarken trennen ... 
    $charact=array();                              // ... und erstes Element wegschmeissen 
    foreach ($a as $x) {                           // die interessierenden Daten aus jedem Bereich ...
      $v=explode("\n",$x);                         // herauslesen und in $charact abspeichern
      $charact[]=array($v[2],$v[4],$v[6],$v[7],$v[8],$v[9],$v[10],$v[13],$v[15]);
    }

    Zur Kontrolle habe ich das ganze auch noch mit folgendem html-Code angezeigt
    <textarea rows="30" cols="90"><? print_r($charact);?></textarea>

    Hier mein Ergebnis:
    Array
    (
        [0] => Array
            (
                [0] => Elu - Stufe 31
                [1] => Lephar
                [2] => Elyos
                [3] => TP 2,217
                [4] => MP 3,291
                [5] => Abyss-Punkte : 1,568
                [6] => Klasse 
                [7] => The Last Angels
                [8] => Balaurzunge
            )
    
        [1] => Array
            (
                [0] => Xelux - Stufe 50
                [1] => Lephar
                [2] => Elyos
                [3] => TP 7,063
                [4] => MP 5,999
                [5] => Abyss-Punkte : 15,807
                [6] => Klasse 
                [7] => Beyond the Horizon
                [8] => Piratenjäger
            )
    
        [2] => Array
            (
                [0] => Angelusmortis - Stufe 43
                [1] => Lephar
                [2] => Elyos
                [3] => TP 5,912
                [4] => MP 3,420
                [5] => Abyss-Punkte : 30,230
                [6] => Klasse 
                [7] => Beyond Good and Evil
                [8] => Held von Eltnen
            )
    
        [3] => Array
            (
                [0] => Fdoppelu - Stufe 42
                [1] => Lephar
                [2] => Elyos
                [3] => TP 3,367
                [4] => MP 7,239
                [5] => Abyss-Punkte : 10,961
                [6] => Klasse 
                [7] => The last Order
                [8] => Sprengstoffexperte
            )
    
        [4] => Array
            (
                [0] => Whiteluna - Stufe 41
                [1] => Lephar
                [2] => Asmodier
                [3] => TP 4,061
                [4] => MP 7,187
                [5] => Abyss-Punkte : 6,099
                [6] => Klasse 
                [7] => Mondgoettin Luna
                [8] => Meisterin der GK-Manipulation
            )
    
        [5] => Array
            (
                [0] => Allelujah - Stufe 39
                [1] => Lephar
                [2] => Asmodier
                [3] => TP 6,895
                [4] => MP 3,070
                [5] => Abyss-Punkte : 17,261
                [6] => Klasse 
                [7] => Great Vesperia
                [8] => Beschützer von Morheim
            )
    
        [6] => Array
            (
                [0] => Cattelus - Stufe 37
                [1] => Lephar
                [2] => Elyos
                [3] => TP 5,898
                [4] => MP 2,823
                [5] => Abyss-Punkte : 21,600
                [6] => Klasse 
                [7] => Bloodhound
                [8] => Liebeszyniker
            )
    
        [7] => Array
            (
                [0] => Elula - Stufe 36
                [1] => Lephar
                [2] => Elyos
                [3] => TP 2,688
                [4] => MP 2,760
                [5] => Abyss-Punkte : 9,066
                [6] => Klasse 
                [7] => ad honorem
                [8] => Geduldsengel
            )
    
        [8] => Array
            (
                [0] => Belusia - Stufe 36
                [1] => Lephar
                [2] => Elyos
                [3] => TP 2,366
                [4] => MP 2,242
                [5] => Abyss-Punkte : 4,869
                [6] => Klasse 
                [7] => Black Angels
                [8] => Achtet die Toten
            )
    
        [9] => Array
            (
                [0] => Angelusnight - Stufe 33
                [1] => Lephar
                [2] => Asmodier
                [3] => TP 4,448
                [4] => MP 2,542
                [5] => Abyss-Punkte : 11,347
                [6] => Klasse 
                [7] => Titel
                [8] => 
            )
    
    )

    sorry ... ist ein wenig lang geworden ...

    Beitrag zuletzt geändert: 2.2.2010 16:11:45 von haniwo
  4. technofan schrieb:
    (..)

    PS: in dem gebiet mit HPs auslesen bin ich ne niete, bitte so genau wie möglich erklären.


    Ich kopiere Dir einfach mal php-code den ich vor längerem geschrieben habe:
    <?php
            //Variablen & POST
             $baseUrl="https://www.ausfuhr.internetzollanmeldung.de";
             $url="https://www.ausfuhr.internetzollanmeldung.de/iaa/action/invoke.do?id=IAA71";
             $url="https://www.ausfuhr.internetzollanmeldung.de/iaa/form/display.do?%24context=0";
             $post="clientCaps=unknown&submitCaps=Weiter";
             
             //POST-DATEN VERARBEITEN
             if (isset($_POST['url']) != false)
             {$url=$_POST['url'];//echo "POST_URL: ".$url."<br>";
             }
    
             if (isset($_POST['post']) != false)
             {   $post=$_POST['post'];//echo "POST_POST: ".$post."<br>";
             }
             $post = getAllPost($post);
             
    ?>
            <form action="httpsCurl.php" method="post">
                  URL<input name="url" size="120" maxlength="" value="<? echo $url; ?>" /><br>
                  POST<input name="post" size="140" maxlength="" value="<? echo $post; ?>" /><br>
                  <input type="submit" value="Oeffnen" /> <br>
            </form>
            <hr>
    <?
    /*======================================================================*\
            Function:       webbot
            Purpose:        oeffnet eine webseite mit cookie & post-unterstützung (http & https)
            Input:               (..)
            Output:         $page           string, die webseite
    \*======================================================================*/
    function webbot( $url, $method=0, $fields=0, $lighttpd=0, $proxy=0 )
    {
      $socket = curl_init();
      CURL_SETOPT($socket, CURLOPT_URL, $url);
      //CURL_SETOPT($socket, CURLOPT_FOLLOWLOCATION, 2);
      CURL_SETOPT($socket, CURLOPT_RETURNTRANSFER, 1);
      ( ( $lighttpd ) ? curl_setopt($socket, CURLOPT_HTTPHEADER, array("Expect:")) : '' );
      ( ( $method ) ? CURL_SETOPT($socket, CURLOPT_POST, true) : CURL_SETOPT($socket, CURLOPT_POST, false) );
      ( ( $method ) ? CURL_SETOPT($socket, CURLOPT_POSTFIELDS, $fields) : '' );
      ( ( $proxy ) ? CURL_SETOPT($socket, CURLOPT_PROXY, $proxy) : '' );
      //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
      CURL_SETOPT($socket, CURLOPT_USERAGENT, "EinGanzUnbekannterBrowser");
    
      //CURL_SETOPT($socket, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
      CURL_SETOPT($socket, CURLOPT_COOKIEJAR, "cookie2.txt");
      CURL_SETOPT($socket, CURLOPT_COOKIEFILE, "cookie2.txt");
      curl_setopt($socket, CURLOPT_HEADER, true);
    
      $page = curl_exec($socket) ;
      curl_close( $socket );
      return $page;
    }
    
    /*======================================================================*\
            Function:        _striplinks
            Purpose:        strip the hyperlinks from an html document
            Input:                $document        document to strip.
            Output:                $match                an array of the links
    \*======================================================================*/
    
            function _striplinks($document)
            {
                    preg_match_all("'<\s*a\s.*?href\s*=\s*                        # find <a href=
                                                    ([\"\'])?                                        # find single or double quote
                                                    (?(1) (.*?)\\1 | ([^\s\>]+))                # if quote found, match up to next matching
                                                                                                            # quote, otherwise match up to next space
                                                    'isx",$document,$links);
    
    
                    // catenate the non-empty matches from the conditional subpattern
    
                    while(list($key,$val) = each($links[2]))
                    {
                            if(!empty($val))
                                    $match[] = $val;
                    }
    
                    while(list($key,$val) = each($links[3]))
                    {
                            if(!empty($val))
                                    $match[] = $val;
                    }
    
                    // return the links
                    return $match;
            }
    
    /*======================================================================*\
            Function:        _stripform
            Purpose:        strip the form elements from an html document
            Input:                $document        document to strip.
            Output:                $match                an array of the links
    \*======================================================================*/
    
            function _stripform($document)
            {
                    preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements);
    
                    // catenate the matches
                    $match = implode("\r\n",$elements[0]);
    
                    // return the links
                    return $match;
            }
    /*======================================================================*\
            Function:        setForm
            Purpose:        findet alle form-elemente,ändert die url & fügt ein hidden-input mit der alten url ein
            Input:                $document         das zu ändernde document
                                  $targetUrl        die (neue) ziel-URl der Form
                                  $baseUrl          das Wurzelverzeichnis der ZielUrl
            Output:                                 das geänderte document
    \*======================================================================*/
    
            function setForm($document,$targetUrl="http://www.simuliertes.lima-city.de/hauswedellundnolte/snoopy/httpsCurl.php",$baseUrl="https://www.ausfuhr.internetzollanmeldung.de")
            {
                   // das Suchmuster
                   $pattern = '/(<form.*?action=")([^"]*)("[^>]*>)/i';
    
                   // Ersatzstring
                   $ersatz = '\1'.$targetUrl.'\3<input  type="hidden" name="url" value="'.$baseUrl.'\2">';
    
                   // RegEx return
                   return preg_replace($pattern, $ersatz, $document );
    
            }
    /*======================================================================*\
            Function:        getAllPost
            Purpose:        gibt alle gesendeten POST-Daten aus
            Input:                $post         bereits festgelegt post-Daten
            Output:                                 $post+alle weiteren post-daten (ausser url und post)
    \*======================================================================*/
            function getAllPost($post)
            {
            foreach ($_POST as $key => $value)
                    {
                            if ($key != "post" && $key != "url" )
                            {
                             if ($post != "") $post .= "&";
    
                             $post .= $key."=".$value;
                            }
                    }
                    return $post;
            }
    /*======================================================================*\
            Function:        makeNoscript
            Purpose:        maskiert/deaktiviert alle <script></script>-tags
            Input:                $document         das zu ändernde document
            Output:                                 das geänderte document
    \*======================================================================*/
    
            function makeNoscript($document)
            {
                   // das Suchmuster
                   $pattern = '/(<script.*?<\/script>)/is';
    
                   // Ersatzstring
                   $ersatz = '<!----------NOSCRIPT-MODUS------
                   \1
                   <!-----NOSCRIPT-MODUS----->
                   ';
    
                   // RegEx return
                   return preg_replace($pattern, $ersatz, $document );
    
            }
    
    
    $page = webbot($url,$method=1, $post);
    echo makeNoscript(setForm($page));
    echo "<!---<br><hr>FORMS:<br><hr><br>";
    print_r(_stripform($page));
    echo "--------><br><hr>LINKS:<br><hr><br><code>";
    print_r(_striplinks($page));
    echo "</code><br><hr>POST-DATA:<br><hr><br>";
    echo $post;
    ?>


    Wie man vielleicht erkennt sind teile des Codes abgekupfert, also wünsche ich Dir auch viel Spaß beim abkupfern :biggrin:
    Hier ist der Code in Aktion

    ausserdem empfehle ich DIr das php-Framework "SNOOPY"
  5. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    oha, jetzt habta mir ja die arbeit abgenommen, das wollt ich eigentlich net so aber ok ^^
    vielen Dank euch beiden. :)
    genau sowas brauche ich... jetzt mal sehen ob ich in den codeschnippseln durchblicke als Vermesser. :D
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!