Nur bestimmte Daten von HP auslesen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausfuhr
auslese
code
datum
element
ersatz
form
http
input
match
modus
output
page
post
punkt
purpose
strip
stufe
url
-
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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
geöffnet hast, kannst Du den gesamten (html-)Inhalt mit$fp=fopen($url,'r');
auslesen. ABER - ausgetestet habe ich das nicht. Ich habe jedoch durchaus schon mit fopen Dateien über ftp-Protokoll geöffnet ...$inhalt=fread($fp,100000);
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 -
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
Hier ist der Code in Aktion
ausserdem empfehle ich DIr das php-Framework "SNOOPY" -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage