Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Pomysł na skrypt.
Forum PHP.pl > Forum > Przedszkole
treebla
Dość krótko uczę się php i chciałbym aby ktoś mi po części wytłumaczył jak powinien wyglądać pewien skrypt. Chodzi mi o to żeby skrypt czytał listę aktualnych graczy on-line w pewnej grze i dodawał ich do bazy. Potrzebowałbym by ten skrypt robił to co minute i uaktualniał lvl. O to strona z listą aktualnych graczy:
http://www.tibia.com/community/?subtopic=w...mp;world=Aldora
Nie chodzi mi o gotowy skrypt ale o jego działanie względnie jak najdokładniejsze. Skrypt ma pobrać ludzi online dodac ich do bazy(ewentualnie txt), robić to co minute i uaktualniać lvl jeżeli ktoś już w bazie jest. Z góry dziękuje za jakieś porady, ewentualnie tutoriale/artykuły gdzie mogę znaleźć podobne skrypty. Chcę jeszcze raz zaznaczyć, że nie chodzi mi o gotowy skrypt.

Pozdrawiam
gox
- laczymy sie z serwerem, pobieramy dane
- przetwarzamy za pomoca wyrazen regularnych
- zapisujemy wynik do brazy
treebla
Do pobierania danych użyć funkcji curl?
Czy potem do odzielenia tekstu mogę użyć funkcji explode?
Znalazłem podobny skrypt i właśnie na tych funkcjach się opierał tylko nie wiem w jaki sposób mam odzielić każdy nick z osobna.
gox
Cytat(treebla @ 27.10.2008, 00:49:51 ) *
Do pobierania danych użyć funkcji curl?

Absolutnie Nie, CURL jest bardzo wolny, uzyj file_get_contents() lub fopen() lub fsockopen() a najlepiej socket_create()

Cytat(treebla @ 27.10.2008, 00:49:51 ) *
Czy potem do odzielenia tekstu mogę użyć funkcji explode?

Mozesz, tez tak zaczynalem, jednak z perspektywy czasu, moge Ci poradzic, żebyś zamiast rzezbic w ten sposob, od razu wzial sie za nauke wyrazen regularnych
http://gajdaw.pl/php/wyrazenia-regularne-pcre-php-tutorial/

Cytat(treebla @ 27.10.2008, 00:49:51 ) *
Znalazłem podobny skrypt i właśnie na tych funkcjach się opierał tylko nie wiem w jaki sposób mam odzielić każdy nick z osobna.

Przy pomocy wyrazen regularnych
deirathe
Co do stron HTML to bardziej polecam domdocument" title="Zobacz w manualu PHP" target="_manual i domxpath" title="Zobacz w manualu PHP" target="_manual lepiej zadziala niz wyrazenia regularne- latwiej bedzie Ci przejsc pomiedzy kolejnymi rekordami, no a jezeli bedziesz sie laczyc ze strona co minute to podejrzewam ze Ci odetna dostep z tego ip albo mozesz miec problemy radze sie laczyc co pol godziny przez curl z wysylaniem innego ip winksmiley.jpg
gox
Cytat(deirathe @ 27.10.2008, 10:23:13 ) *
lepiej zadziala niz wyrazenia regularne

Ojjj, co to to nie.
deirathe
nie napisalem szybciej, tylko lepiej w sensie ze latwiej tongue.gif sproboj sobie tablice sfetchowac tabela z pomoca wyrazen, a zrob to samo z domxpath
  1. <?php
  2. $domxpath->query("//table[@id='cos']/tr/td[1]");
  3. ?>

a teraz wyrazenia, nawet mi sie pisac nie chce bo za dlugie to tongue.gif


//@-gox-

No to pokaz mi to na wyrazeniach bo ciekaw jestem, przetestujemy tez wydajnosc ;], z mila chcecia zoabcze jak to sie klasuje, bo wyrazenia az tak super wydajne z tego, co wiem to nie sa, nie w php tongue.gif
gox
Moze i dlugie, ale jaka satysfakcja i wydajnosc..
szczegolnie jak za duzo wycofan nie narobisz...
nexis
  1. <?php
  2. $url     = 'http://www.tibia.com/community/?subtopic=whoisonline&world=Aldora';
  3. $subject = file_get_contents($url);
  4. $pattern = '/<TR BGCOLOR=.*><TD WIDTH=.*><A HREF=".*">(.*)</A></TD><TD WIDTH=.'
  5.         . '*>(.*)</TD><TD WIDTH=.*>(.*)</TD></TR>/U';
  6.  
  7. preg_match_all($pattern, $subject, $matches);
  8. $count = count($matches[0]);
  9. for ($i = 1; $i < $count; $i++) {
  10.   $name     = $matches[1][$i];
  11.   $level    = $matches[2][$i];
  12.   $vocation = $matches[3][$i];
  13.   printf('%s, %d, %s<br />' . PHP_EOL, $name, $level, $vocation);
  14. }
  15. ?>

Zamiast printf" title="Zobacz w manualu PHP" target="_manual możesz zrobić z danymi co tylko chcesz. Jeśli chodzi o cykliczną aktualizację danych poczytaj o cron.

Cytat(deirathe @ 27.10.2008, 10:23:13 ) *
radze sie laczyc co pol godziny przez curl z wysylaniem innego ip winksmiley.jpg

Niby jak chcesz zmodyfikować IP?
deirathe
  1. <?php
  2. $url     = 'http://www.tibia.com/community/?subtopic=whoisonline&world=Aldora';
  3. $subject = file_get_contents($url);
  4. $dom = new DOMDocument();
  5. $dom->loadHTML($subject);
  6. $xpath = new DOMXPath($dom);
  7. $query = $xpath->query("//div[@class='BoxContent']/table/tr/td[2]/table[2]/tr");
  8. $i=0;
  9. foreach($query as $item)
  10. {
  11.    $players[$i]['name'] = $item->getElementsByTagname("a")->item(0)->nodeValue;
  12.    $players[$i]['lvl'] = $item->getElementsByTagname("td")->item(1)->nodeValue;
  13.    $players[$i]['vocation'] = $item->getElementsByTagname("td")->item(2)->nodeValue;
  14.    $i++;
  15. }
  16. print_r($players);
  17. ?>



//ok ip rzeczywiscie nie mozna zmienic, moj blad
treebla
Dziękuje za pomoc... Co do łączenia musi to być 5-10 minut bo co tyle serwer odświeża tą listę. Bardzo mi pomogliście powyższymi postami teraz biorę się za dokładne zrozumienie wszystkiego co napisaliście i próbuje zacząć skrypt.

Pozdrawiam
xddd
a szybko to będzie działało jak będzie zapis co 1min. ?
jareeny
Poza tym zapomnieliście wspomnieć o CRONie, żeby skrypt sam się wykonywał co określony czas.

http://en.wikipedia.org/wiki/Cron
gox
zamiast crona uzywam tzn. loopa:

  1. <?php
  2. function loop() {
  3.    $loop_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'].'?val='.$_GET['val'].'&val2='.$_GET['val2'].'&val3='.$_GET['val3'];
  4.    $parsed_url = parse_url($loop_url);
  5.  
  6.    $sock_url = $parsed_url['path'] . '?' . $parsed_url['query'];
  7.    
  8.    $fp = fsockopen( gethostbyname($parsed_url['host']), 80 );
  9.    fwrite($fp, 'GET '.$sock_url.' HTTP/1.1
  10. User-Agent: Opera/9.'.mt_rand(1,10000).'
  11. Host: '.$parsed_url['host'].'
  12. Connection: Close
  13.  
  14. ');
  15.    sleep(20);
  16.    fclose($fp);
  17.    return true;
  18. }
  19. ?>


Bo crona moge 1 odpalic na tym fantastycznym hostingu w nazwie.
jareeny
Hmm, ciekawe rozwiązanie, szczerze nigdy się z nim nie spotkałem, a na pewno pomoże winksmiley.jpg
Treebla
CODE
<?php
$url = 'http://www.tibia.com/community/?subtopic=whoisonline&world=Aldora';
$subject = file_get_contents($url);
$pattern = '/<TR BGCOLOR=.*><TD WIDTH=.*><A HREF=".*">(.*)</A></TD><TD WIDTH=.'
. '*>(.*)</TD><TD WIDTH=.*>(.*)</TD></TR>/U';

preg_match_all($pattern, $subject, $matches);
$count = count($matches[0]);
for ($i = 1; $i < $count; $i++) {
$name = $matches[1][$i];
$level = $matches[2][$i];
$vocation = $matches[3][$i];
printf('%s, %d, %s<br />' . PHP_EOL, $name, $level, $vocation);
}
?>


Ten skrypt zrozumiałem, poczytałem o funkcji preg_match_all oraz o wyrażeniach regularnych. Nie ukrywam, że nie wszystko jeszcze w pełni rozumiem, ale najszybciej się uczę próbując tworzyć różne skrypty. Dla testu wrzuciłem ten skrypt powyżej jednak wywala mi taki błąd "Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '>' in /home/***/domains/***.pdg.pl/public_html/index.php on line 7" Adres wygwiazdkowałem bo to nie istotne. Próbowałem coś z tym zrobić lecz ciągle nie działa. W czym może być problem?
kubek15
czy masz może już ten skrypt? Czy ci dobrze działa?
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.