Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Pobieranie danych z Open Tibia Server
Forum PHP.pl > Forum > Przedszkole
emajl22
Próbuję napisać skrypt, który pobierze mi dane z z serwera Open Tibia. Ma polegać to na tym, że wpisuję adres IP jakiegoś serwera i skrypt pobiera mi dane o ilości graczy online i innych, mniej ważnych rzeczach. Problem polega na tym, że nie wiem jak do tego się zabrać, dlatego zwracam się do Was z prośbą o pomoc.

Wszelkie wskazówki będą nagradzane. Z góry dzięki.

md1988
To pytanie powinno się pojawić bardziej na forum Tibii smile.gif Musisz po prostu połączyć się do serwera Tibii i odpowiednio zdobyć od serwera potrzebną Ci informacje. Przyda się więc znajomość socketów(do otwarcia połączeń) i protokołu tibii do ekstrakcji danych tongue.gif *

*to instrukcja ogólna, być może Tibia oferuje zdobywanie takich danych w przystępnej postaci.
emajl22
Cytat(md1988 @ 28.11.2010, 00:57:56 ) *
*to instrukcja ogólna, być może Tibia oferuje zdobywanie takich danych w przystępnej postaci.

No na pewno, bo jak inaczej listy ots zdobywają te wszystkie dane?

Znalazłem w internecie coś takiego:

  1. <?php
  2.  
  3. $ip = "warots.net.pl";
  4. $port = "7171";
  5.  
  6. $info = chr(6).chr(0).chr(255).chr(255).'info';
  7. $sock = @fsockopen($ip, $port, $errno, $errstr, 1);
  8. if ($sock)
  9. {
  10. fwrite($sock, $info);
  11. $data='';
  12. while (!feof($sock))
  13. $data .= fgets($sock, 1024);
  14. fclose($sock);
  15. preg_match('/players online="(\d+)" max="(\d+)" peak="(\d+)"/', $data, $matches);
  16. print '<FONT class="uni_03">Status:</FONT><b><font face="verdana" size="2" color="#FFAA00"> Online</font></b><br>';
  17. echo '<FONT class="uni_03">Players online: </FONT></b><FONT class="uni_04">';
  18. echo $matches[1] . '/' . $matches[2];
  19. preg_match('/uptime="(\d+)"/', $data, $matches);
  20. $h = floor($matches[1] / 3600);
  21. $m = floor(($matches[1] - $h*3600) / 60);
  22.  
  23. print '<br><FONT class="uni_03">Monsters: </FONT><FONT class="uni_04">liczba online</FONT>';
  24. print "<br><FONT class='uni_03'>Uptime: </FONT<FONT class='uni_04'> $h" . ($h==1? 'h' : ($h==2||$h==3||$h==4? 'h' : 'h'));
  25. print " $m" . ($m==1? 'm' : ($m==12||$m==13||$m==14? 'm' : ($m%10==2||$m%10==3||$m%10==4? 'm' : 'm'))) . '</FONT>';
  26. print '<br><FONT class="uni_03">Klient:</FONT><FONT class="uni_04">'.$klient;'</FONT>';
  27. print '<br><FONT class="uni_03">Host:</FONT><FONT class="uni_04">'.$ip;'</FONT>';
  28. print '<br><FONT class="uni_03">Port:</FONT><FONT class="uni_04">'.$port;'</FONT>';
  29. print '<br><FONT class="uni_03">World type:</FONT><FONT class="uni_04">'.$server_type;'</FONT>';
  30. print '<br><FONT class="uni_03">Experience:</FONT><FONT class="uni_04">'.$exp;'</FONT>';
  31. $counthouse = count(glob("$dirdata/houses/*.*"));
  32. if($counthouse > 0)
  33. {
  34. print '<br><FONT class="uni_03">Houses:</FONT><FONT class="uni_04">'.$counthouse;'</FONT>';
  35. }
  36. else
  37. {
  38. print '<br><FONT class="uni_03">Houses:</FONT><FONT class="uni_04">--</FONT>';
  39. }
  40.  
  41. }
  42. else {
  43. print '<font color=silver size=2>     Status: <font color=red size=3><i>Ofline</i></center></font><br>';
  44.  
  45.  
  46. }
  47.  
  48. ?>

Odziwo działa, jednak nie do końca. Jak zmienię jakiś adres IP, wejdę na stronę to działa, ale jak już odświeżę, to już nie. Wszystko widać oprócz wyników, jedynie działa wtedy "Status". Co może być przyczyną?
md1988
Spróbuj wyświetlić dane które otrzymujesz z serwera.

  1. while (!feof($sock))
  2. $data .= fgets($sock, 1024);
  3. fclose($sock);
  4. echo $data;

Być może trzeba przerobić lekko parsowanie smile.gif
Interesujące powinny być dla Ciebie zwłaszcza przypadki gdy tylko status się wyświetla.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.