Strona 1 z 1

[PHP]Pobieranie informacji ze strony

: 28 gru 2009, 13:43
autor: krzychu1990
Witam, robię stronę w celu edukacji, chyba jak każdy :). Ze względu na to, że jedyna gra w jaką sobie pykałem czasem to była Tibia to też strona będzie o temacie tibijskim - planuję zrobić stronę, która pokazywałaby ludziom ile grają w danym dniu, tygodniu, miesiącu oraz będzie też podstrona poświęcona informacji o ich postaci, które będą pobierane z Tibia.com. Mam teraz pytanie, w php jestem raczej początkujący. Dajmy na to tutaj - http://www.tibia.com/community/?subtopic=characters - w pole możecie wpisać nick mojej postaci - Ratzilla. Pokaże się wam spis:
Name: Ratzilla
Sex: male
Profession: Paladin
Level: 16
World: Refugia
Residence: Carlin
Last login: Dec 28 2009, 13:33:15 CET

I teraz jak zrobić, żeby skrypt pobierał te informacje,dajmy na to postem. Potem z wklejeniem ich na stronę sobie już poradzę :). Z góry dziękuje o pomoc.

Odp: [PHP]Pobieranie informacji ze strony

: 28 gru 2009, 14:00
autor: warek
Skorzystaj z cURL.

Przykład z jednej z stron w internecie:

function file_get_the_contents($url) {
$ch = curl_init();
$timeout = 10; // set to zero for no timeout
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_POST);
(...)
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$file_contents = curl_exec($ch);
curl_close($ch);
return $file_contents;
}

Nie wiem jedynie jak wygląda kwestia korzystania z cURL'a na zewnętrznych hostingach. Na localhostach wystarczy włączyć odpowiednie biblioteki.

Odp: [PHP]Pobieranie informacji ze strony

: 28 gru 2009, 14:13
autor: krzychu1990
Na podstawie cURL'a napisalem coś takiego, ale czy to jest dobrze to nie wiem:

TEORIA

$hand = curl_init();

curl_setopt($hand, CURLOPT_URL, 'http://www.tibia.com/community/?subtopic=characters');
curl_setopt($hand, CURLOPT_POST, 1);
curl_setopt($hand, CURLOPT_POSTFIELDS, 'title=Ratzilla&action=level');
curl_exec($hand);

curl_close($hand);
?>

Za pewne jest to źle napisane ze względu na to, że nie ma dokładnego adresu URL do stony pokazującej informacji o mojej postaci. TJ. http://www.tibia.com/community/?subtopic=characters i gdy wpiszemu to nick Ratzilla to wyświetlą się dane ale w pasku adresu nadal będzie widnieć http://www.tibia.com/community/?subtopic=characters

Odp: [PHP]Pobieranie informacji ze strony

: 28 gru 2009, 15:23
autor: rack
Na szybko całą stronę ze statystykami z poziomu php bez udziału wrappera można ściągnąć tak

Kod: Zaznacz cały

system(" curl -d 'name=Ratzilla' http://www.tibia.com/community/?subtopic=characters");
Przekieruj sobie to co zostało sciągnięte do jakiegoś tymczasowego pliku etc., tak aby cały skrypt php na tym nie wisiał ...

Wszystkie dane znajduja się w tabeli w bloku z klasą BoxContent. Niezależnie od tego czy chcesz pełne dane czy tylko cząstkowe, będziesz musiał chwile posiedzieć na wyrażeniami regularnymi ;))

pozdrawiam
S.Wojnowski

Odp: [PHP]Pobieranie informacji ze strony

: 28 gru 2009, 23:41
autor: krzychu1990
Dziękuje Ci panie Wojnowski, Twój sposób działa :).

Zostało mi jeszcze jedno:

mianowicie pobrałem zawartość tej strony i zapisałem sobie ją do pliku stats.txt
<?php
$zapisz = system(" curl -d 'name=Ratzilla' http://www.tibia.com/community/?subtopic=characters");
$stats = fopen("stats.txt", 'w+');
fwrite($stats, $zapisz);
fclose($stats);
?>
Teraz chce następny skrypt ma za zadanie wyciągnąć z tego każdą informacje, na początku "name". Niestety nie moge się dopatrzeć w źródle tej strony jak nazywa się to pole z name'em postaci...
<?php
$a = fopen("statystyki.php", 'w');
$a = $name;
$stats = fopen("info.txt", 'w+');
fwrite($stats, $a);
fclose($stats);
fclose($a);
?>
Można zauważyć pewną niedogodność, w 2gim kodzie otwieram tam statystyki.php a nie stats.txt czyli miejsce gdzie zostało to zapisane. Otórz ten pierwszy skrypt ściągnął całą stronę z statsami postaci nawet z layoutem i strona wyświetla się teraz w statystyki.php :). No i jeżeli 2gi skrypt jest dobrze napisany to wystarczy w drugiej linijce $a = $name; zamienić $name na odpowiednią nazwe pola i powinno działać, ale nie wiem skąd to pole wziąć.

EDIT:
#Odświerzam

Odp: [PHP]Pobieranie informacji ze strony

: 29 gru 2009, 00:08
autor: dam
Twój skrypt nie robi nic oprócz, pobrania htmla strony i zapisania go do pliku, nie parsuje go w żaden sposób, tak więc nie wiem o jakim podawaniu nazwy pola piszesz, kod już pobrany masz, teraz cała magia w wyrażeniach regularnych, żeby sobie regexami odpowiednie dane wyciągnąć z kodu html i wrzucić np. do tablicy lub przypisać do zmiennych, coby później móc na nich łatwo operować. Dane które cię interesują wpisane są w tabelę, tak więc to czego potrzebujesz musisz powyciągać z jej komórek <td/>, elementy tabelki mają swoją specyfikę, kolory, szerokość itp. co oczywiście pomaga. Piszesz, że w PHP jesteś początkujący, więc pewnie wyrażeń regularnych nie znasz, choć kto wie, bo regexy domeną PHP nie są :P

Odp: [PHP]Pobieranie informacji ze strony

: 29 gru 2009, 00:27
autor: krzychu1990
No dobrze, to może w takim razie napiszesz mi jak wyciągnąć chodź jedną komórkę z tego html'a przy użyciu wyrażen regularnych, a z resztą już sobie poradzę...

Odp: [PHP]Pobieranie informacji ze strony

: 29 gru 2009, 00:44
autor: dam
Mogło by to wyglądać tak,

Kod: Zaznacz cały

preg_match('/<tr bgcolor=#f1e0c6><td width=20%>Name:<\/td><td>(.+)<\/td><\/tr>/siU', $html, $tmp1);
preg_match('/<tr bgcolor=#f1e0c6><td>Profession:<\/td><td>(.+)<\/td><\/tr>/siU', $html, $tmp2);

$name = $tmp1[1];
$profession = $tmp2[1]0
// $html to zmienna z wczesniej zapisanym kodem html strony;
Napisałem "mogło by wyglądać" bo sposobów na wyciągnięcie tego znalazło by się pewnie kilka, ale wydaje mi się, że w taki sposób(gdzie każda komórka rozbita jest na osobnego preg_matcha) będzie ci to łatwiej zrozumieć.

Odp: [PHP]Pobieranie informacji ze strony

: 29 gru 2009, 01:17
autor: beluosus
Mogłoby, lecz myślę, że wystarczy:

Kod: Zaznacz cały

preg_match('/Name:<\/TD><TD>(.+)<\/TD>/Ui', $plik, $wynik);
...
echo("Name: " . $wynik[1]);
PS
"Odświerzam" -> odświeżać
"jak wyciągnąć chodź jedną komórkę" -> choć (chociaż != chodzić)

PS2
http://pl.php.net/manual/en/function.preg-match.php

Odp: [PHP]Pobieranie informacji ze strony

: 29 gru 2009, 01:21
autor: krzychu1990
Dziękuje kumam:D! tylko wiem wiem co to jest to $tmp1 oraz $tmp2...

Odp: [PHP]Pobieranie informacji ze strony

: 29 gru 2009, 19:08
autor: dam
@beluosus, jasne że wystarczy, tak jak napisałem to tylko przykład :) a idąc dalej takim sposobem przy odrobinie pomyślunku można większość danych z tej tabelki wyciągnąć jednym regexem.

@krzychu1990, $tmp1 i $tmp2 to najprościej mówiąc tablice zawierające dane które pasowały do wyrażenia regularnego, i tak w tablicy $tmp1 element o indeksie 1 zawiera twoje "Name" z tabelki, stąd to przypisanie $name = $tmp[1];