# Daten aus Internetseite (in PHP) auslesen?



## Chef1104 (8. Mrz 2010)

Hallo,
ich habe mal eine Frage. Und zwar schwebt mir schon länger eine Idee vor, ich spiele mit meinen Freunden einen online Fußballmanager. In diesem Manager sammelt man je nach Bundesligaspieltag Punkte. Die Punkteabrechnung mit Tabelle wird dann immer am Montag online gestellt. Da aber bereits Spiele am Freitag, Samstag und Sonntag stattfinden, kann man seinen zwischenzeitlichen Punktestand auf einer anderen Homepage abrufen, indem man dort seinen Nickname eintippt und dort dann seinen Livepunktestand dieses Spieltags begutachten kann.
Meine Idee wäre es jetzt irgendwie die Punktstände meiner Kumpels auszulesen und dann in einer Tabelle wieder auszugeben.
Hier mal der Link zu dieser Internetseite: Comunio Statistiken - Punkte-Generator
wenn man hier unter "anderes Team ansehen" --> "Benutzername:" den jeweiligen Nickname eingibt, z.B. "chef007" --> bekommt man den aktuellen Punktestand, den ich gerne irgendwie ausgelesen hätte.

Ist sowas irgendwie möglich? Da diese Seite in PHP programmiert ist?

Danke schon mal für eure Tipps!


----------



## faetzminator (8. Mrz 2010)

Du musst einfach "manuell" den Seitenaufruf machen, die Felder abfüllen, die Form senden etc. Siehe dir dazu am Besten den HttpClient - HttpClient Home an.


----------



## Chef1104 (10. Mrz 2010)

Du meinst über HttpRequest irgendwie das Formular automatisch ausfüllen lassen? Ich habe mir mal von der darauf folgende Seite (die die Gesamtpunkte enthält die ich auch auslesen wollte) den HTML Quelltext angesehen, leider kann man da nirgends die Gesamtpunktzahl rauslesen. Kann ich das dann über diesen HTMLRequest auslesen?

Danke schon mal


----------



## hemeroc (10. Mrz 2010)

Die Seite die nach dem absenden als Antwort kommt beinhaltet irgendwo folgendes Konstrukt:

[XML]
<tr class="r2 gesamt">
     <td colspan="5">Gesamtpunkte</td>
     <td>HIER STEHT DEINE PUNKTEZAHL</td>
     <td colspan="2"></td>
</tr>
[/XML]

Ich würde wohl das was zurückkommt einfach per regex filtern und zwar nach allem was zwischen:
"_<td colspan="5">Gesamtpunkte</td><td>_" und "_</td><td colspan="2">_"
Eine andere Lösung wäre einen DOM-Parser zu verwenden aber in dem Fall bist du mit regex wohl schneller.

LG Hemeroc


----------



## andiv (11. Mrz 2010)

Ganz so einfach ist es glaube ich nicht. Die Seite arbeitet viel mit JavaScript und AJAX und soweit ich das gesehen habe wird diese Tabelle erst dynamisch von irgendeinem dieser Skripte erstellt. Mit einem bloßen HTTP-Request ist es da dann doch noch lange nicht getan, oder?


----------



## Dow Jones (11. Mrz 2010)

andiv hat gesagt.:


> Ganz so einfach ist es glaube ich nicht.


Och, es scheint sogar noch viel einfacher zu sein. 
Wie es aussieht holt sich die Webseite die angeforderten Daten per Ajax oder so. Es wird jedenfalls ein Zugriff auf den Server (Port 80) gemacht und zurück kommt kein HTML-Dokument sondern nur eine verschachtelte Datenstruktur.

Kann man direkt im Browser eingeben:

```
http://www.comstats.de/spieler.php?action=rot&n=chef007
```
oder auch per telnet (Leerzeile am Ende nicht vergessen)

```
> telnet www.comstats.de 80
GET /spieler.php?action=rot&n=chef007 HTTP/1.0
HOST: www.comstats.de
[i][Leerzeile][/i]
```

Das Ergebnis in beiden Fällen:

```
{"cid":1315866,"md":"07.03.10 00:06","p":
[{"nr":0,"id":710,"na":"Kluge","c":"10","p":3,"s":1,"pk":2,"t":0,"e":0,"g":0,"gr":0,"r":0,"ew":null,"aw":83},
{"nr":1,"id":1022,"na":"H. Müller","c":"18","p":1,"s":1,"pk":0,"t":0,"e":0,"g":0,"gr":0,"r":0,"ew":null,"aw":null},
{"nr":2,"id":30595,"na":"Delpierre","c":"14","p":2,"s":1,"pk":2,"t":0,"e":0,"g":1,"gr":0,"r":0,"ew":null,"aw":null},
{"nr":3,"id":30760,"na":"Sahin","c":"5","p":3,"s":1,"pk":2,"t":0,"e":0,"g":0,"gr":0,"r":0,"ew":null,"aw":null},
{"nr":4,"id":30956,"na":"Haggui","c":"17","p":2,"s":1,"pk":0,"t":0,"e":0,"g":0,"gr":0,"r":0,"ew":null,"aw":null},
{"nr":5,"id":31059,"na":"Höwedes","c":"10","p":2,"s":1,"pk":13,"t":1,"e":0,"g":0,"gr":0,"r":0,"ew":null,"aw":null},
{"nr":6,"id":31290,"na":"Luiz Gustavo","c":"62","p":3,"s":2},
{"nr":7,"id":31295,"na":"Obasi","c":"62","p":4,"s":2},
{"nr":8,"id":31503,"na":"Pliatsikas","c":"10","p":3,"s":2},
{"nr":9,"id":31512,"na":"Berg","c":"4","p":4,"s":2},
{"nr":10,"id":31541,"na":"Barrios","c":"5","p":4,"s":1,"pk":4,"t":0,"e":0,"g":0,"gr":0,"r":0,"ew":null,"aw":null},
{"nr":11,"id":30555,"na":"Wetklo","c":"18","p":1,"s":12}]}
```

Bei der Implementierung eines Auswertungstools würde ich einfache Sockets verwenden und den benötigten HTTP-Requestheader per Hand da reinschreiben. Aber nimm dir dann bitte, bitte die Zeit und informiere dich etwas über Http, damit du auch einen _wohlgeformten_ Header hinbekommst. Der Betreiber des Servers wird es dir danken. ;-)


----------



## Chef1104 (11. Mrz 2010)

hey, das sieht ja schon mal Klasse aus! Damit müsste sich was anfangen lassen. Leider kann ich in dieser Datenstruktur keine Gesamtpunktzahl finden, aber diese könnte ich durch die Punktezahl der einzelnen Spieler errechnen. 
Versuche mich da jetzt ein bisschen einzulesen. Sollte ich nochmal Fragen haben, Poste ich hier nochmal!
Danke schon mal für eure Tipps!!!


----------

