Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie danych...
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
bibi
Czy mógłby ktoś mi pomóc w jaki kolwiek sposób w napisaniu skryptu który:
- miałby pobierać co np. 5 minut dane z danej strony (chodzi mi głównie o liczbę, ludzi jacy przebywają na serwerze)
- oraz rysował wykres podany w godzinach ile osób przebywa średnio na serwerze

Chodzi o to, że mam stronę www.ethereal-ro.com/mycp/ strona, servera do gry Ragnarok Online, na której jest podane czy server jest Online czy Offline (to akurat umiem zrobić ;p) oraz ludność jaka w danym momencie jest na serwerze.
Więc jeśli ktoś zna taki sposób to chętnie posłucham snitch.gif, nie trzeba dawać odrazu spuer gotoego skryptu, ale naprowadzić mnie jakoś ;s
Gość_nand
mozesz uzyc funcji socketowych (fsock open) aby połaczyc sie do strony i ją sciągnac (trzeba sformułowac zapytanie http GET) lub też curl jeśli masz go wkompilowanego w php. Tak czy inaczej po ściągnięciu strony w formie htmla trzeba wyodrębnić to co chcesz mieć wpisac najlepiej do tabeli mysql.

Z tabeli mysql wykresy mozesz stworzyć rysując słupki za pomocą obrazka - prostokącika o wymiarach powiedzmy 1x4. Trzeba znormalizować wartości (wyrazic w stosunku do całosci - procenty) i narysowac w pętli odpowiednio słupki z odpowiedniej liczby prostokącików (obrazków)

...sorry za brak szczegółów...
Gość_nand
jeszcze jedno... guzik zrobisz jesli nie masz mozliwosci cyklicznego uruchamiania skryptu php który bedzie zbierał te dane z jakiejs strony (np za pomocą crontaba)
Gość_nand
jesli nie masz całkowicie zadnego sposobu na cykliczne uruchamianie skryptu php mozesz teroetycznie zastosowac jeden tak jakby działajacy na okrągło. Oczywiscie twoj admin w php.ini ustalił max_execution_time powiedzmy na 30, ale mogłbys zrobic tak ze po 28 sekundach uruchomi sie kolejny skrypt, który po 28 sekundach uruchomi kolejny itd itd. stara stuczka. Najłatwiej zrobic ja przy pomocy CURL ale także mozna przy pomocy fukcji socketowych.
bibi
Wczoraj w nocy szukałem co nieco o rysowaniu wykresów w php i znalazłem ciekawe pomysły. Więc z tym nie ma problemu ;p
Może masz linki do stron opisujących te "fsock open" lub "curl", znalazłem trochę przykładów, ale są na wyższym poziomie. Mi głównie chodzi o to by pobrać liczbę userów, którzy znajdują sie na dqnej stronie co kilka minut, albo sec, tak jak napisałeś. A później by zapisywało w mysql. żeby później zrobić z tego wykres. (Skrypty wykresów już znalazłem, chyba nawet jeden na tej stronie ;p)
Jeśli ktoś by przedstawił to na jakimś łatwym przykładzie, albo dał jakieś linki pomocnicze to będe bardzo wdzięczny.
bibi
Ok, mam taki coś :]
skrypt do zapisania zawartości strony http://www.ethereal-ro.com/mycp/server_status.php
  1. <?php
  2. $ch = curl_init("http://www.ethereal-ro.com/mycp/server_status.php");
  3. $fp = fopen("spoko.txt", "w");
  4.  
  5. curl_setopt($ch, CURLOPT_FILE, $fp);
  6. curl_setopt($ch, CURLOPT_HEADER, 0);
  7.  
  8. curl_exec($ch);
  9. curl_close($ch);
  10. fclose($fp);
  11. ?>

tym sposobem, zapisuje mi się źródło strony do pliku. I mam pytanie jak to przekształcić by pobierało tylko liczbę podaną w "Users Online" na tej stronie i zapisywało do pliku. No, a jeśli się nie uda zrobić czegoś takiego, jak mogę wyciągnać z pliku spoko.txt
Kod
<center><table border="0" cellpadding="0" cellspacing="0">
    <tbody>
  <tr>
      <th height="28" class="title">Ethereal-RO CP</th>
  </tr>
  <tr>
      <td>
    <table border="0" cellpadding="0" cellspacing="0"><tr><td align="right"><b>Login Server:&nbsp;</b></td><td> <font color="green">Online</font></td></td></tr><tr><td align="right"><b>Char Server:&nbsp;</b></td><td> <font color="green">Online</font></td></td></tr><tr><td align="right"><b>Map Server:&nbsp;</b></td><td> <font color="green">Online</font></td></td></tr><tr><td align="right"><b>Users Online:&nbsp;</b></td><td align="right">694</td></tr></table>
      </td>
  </tr>
    </tbody>
</table></center>

tylko wartoś Userów Online ;/, szukałem o tym na google i kilku stronach związanych z php, ale znalazłem tylko jak wyciągać cały plik, a nie np dany tekst.
Gość_nand
Kod
<?php
$ch = curl_init("http://www.ethereal-ro.com/mycp/server_status.php");

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);

$strona = curl_exec($ch);
curl_close($ch);

$exp = explode("Users Online",$strona);
$exp = explode("right\">",$exp[1]);
$exp = explode("<",$exp[1]);

echo "userow online $exp[0]";

?>


wiem ze zastosowanie explode tutaj jest mało profesjonalne winksmiley.jpg
Gość_nand
a co do ciagłej pracy skryptu php jesli nie masz dostepu do crontaba to jest to trudniejsze. trzeba by uzyc tak samo curl lub fsockopen lub tez polecen systemowych jesli twoj admin daje dostep do nich.
bibi
Dzięki za pomoc, napisałem skrypcik na przykładzie wcześniejszego.
Chodziło mi o to, że jest strona, na której znajdują się w tabeli: Logo Gildi, Nazwa Gildi, Zamek, który posiada gildia. http://www.ethereal-ro.com/mycp/guild.php

Skrypt
  1. <?php
  2. $ch = curl_init("http://www.ethereal-ro.com/mycp/guild.php");
  3.  
  4. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_HEADER, 1);
  6.  
  7. $strona = curl_exec($ch);
  8. curl_close($ch);
  9.  
  10.  
  11. // zamki w aldebaran
  12. $zamek1 = explode("head\">Castle",$strona);
  13. $zamek1 = explode("<tr>",$zamek1[1]);
  14. $zamek1 = explode("</tr>",$zamek1[1]);
  15.  
  16. $zamek2 = explode("Aldebaran Noisyubantian",$strona);
  17. $zamek2 = explode("<tr>",$zamek2[1]);
  18. $zamek2 = explode("</tr>",$zamek2[1]);
  19.  
  20. $zamek3 = explode("Aldebaran Hohensyubangawoo",$strona);
  21. $zamek3 = explode("<tr>",$zamek3[1]);
  22. $zamek3 = explode("</tr>",$zamek3[1]);
  23.  
  24. $zamek4 = explode("Aldebaran Nyirenverk",$strona);
  25. $zamek4 = explode("<tr>",$zamek4[1]);
  26. $zamek4 = explode("</tr>",$zamek4[1]);
  27.  
  28. $zamek5 = explode("Aldebaran Byirtsburi",$strona);
  29. $zamek5 = explode("<tr>",$zamek5[1]);
  30. $zamek5 = explode("</tr>",$zamek5[1]);
  31.  
  32.  
  33. // zamki w geffen
  34. $zamek6 = explode("Aldebaran Rotenburk",$strona);
  35. $zamek6 = explode("<tr>",$zamek6[1]);
  36. $zamek6 = explode("</tr>",$zamek6[1]);
  37.  
  38. $zamek7 = explode("Geffen Reprion",$strona);
  39. $zamek7 = explode("<tr>",$zamek7[1]);
  40. $zamek7 = explode("</tr>",$zamek7[1]);
  41.  
  42. $zamek8 = explode("Geffen Yolbriger",$strona);
  43. $zamek8 = explode("<tr>",$zamek8[1]);
  44. $zamek8 = explode("</tr>",$zamek8[1]);
  45.  
  46. $zamek9 = explode("Geffen Isinlife",$strona);
  47. $zamek9 = explode("<tr>",$zamek9[1]);
  48. $zamek9 = explode("</tr>",$zamek9[1]);
  49.  
  50. $zamek10 = explode("Geffen Berigel",$strona);
  51. $zamek10 = explode("<tr>",$zamek10[1]);
  52. $zamek10 = explode("</tr>",$zamek10[1]);
  53.  
  54.  
  55. // zamki w payon
  56. $zamek11 = explode("Geffen Melsedetsu",$strona);
  57. $zamek11 = explode("<tr>",$zamek11[1]);
  58. $zamek11 = explode("</tr>",$zamek11[1]);
  59.  
  60. $zamek12 = explode("Payon Mingting",$strona);
  61. $zamek12 = explode("<tr>",$zamek12[1]);
  62. $zamek12 = explode("</tr>",$zamek12[1]);
  63.  
  64. $zamek13 = explode("Payon Tiantan",$strona);
  65. $zamek13 = explode("<tr>",$zamek13[1]);
  66. $zamek13 = explode("</tr>",$zamek13[1]);
  67.  
  68. $zamek14 = explode("Payon Fuying",$strona);
  69. $zamek14 = explode("<tr>",$zamek14[1]);
  70. $zamek14 = explode("</tr>",$zamek14[1]);
  71.  
  72. $zamek15 = explode("Payon Honglou",$strona);
  73. $zamek15 = explode("<tr>",$zamek15[1]);
  74. $zamek15 = explode("</tr>",$zamek15[1]);
  75.  
  76.  
  77. // zamki w prontera
  78. $zamek16 = explode("Payon Zhulinxian",$strona);
  79. $zamek16 = explode("<tr>",$zamek16[1]);
  80. $zamek16 = explode("</tr>",$zamek16[1]);
  81.  
  82. $zamek17 = explode("Prontera Creamhilt",$strona);
  83. $zamek17 = explode("<tr>",$zamek17[1]);
  84. $zamek17 = explode("</tr>",$zamek17[1]);
  85.  
  86. $zamek18 = explode("Prontera Sbanhealt",$strona);
  87. $zamek18 = explode("<tr>",$zamek18[1]);
  88. $zamek18 = explode("</tr>",$zamek18[1]);
  89.  
  90. $zamek19 = explode("Prontera Lazrigees",$strona);
  91. $zamek19 = explode("<tr>",$zamek19[1]);
  92. $zamek19 = explode("</tr>",$zamek19[1]);
  93.  
  94. $zamek20 = explode("Prontera Squagul",$strona);
  95. $zamek20 = explode("<tr>",$zamek20[1]);
  96. $zamek20 = explode("</tr>",$zamek20[1]);
  97.  
  98. $zamek21 = explode("Prontera Guindull",$strona);
  99. $zamek21 = explode("<tr>",$zamek21[1]);
  100. $zamek21 = explode("</tr>",$zamek21[1]);
  101.  
  102. echo "<b>Zamki w Alde Baran</b><br> $zamek1[0] <br> $zamek2[0] <br> $zamek3[0] <br> $zamek4[0] <br> $zamek5[0] <br><br> 
  103. <b>Zamki w Geffen</b> <br> $zamek6[0] <br> $zamek7[0] <br> $zamek8[0] <br> $zamek9[0] <br> $zamek10[0] <br><br>
  104.  <b>Zamki w Payon</b> <br> $zamek11[0] <br> $zamek12[0] <br> $zamek13[0] <br> $zamek14[0] <br> $zamek15[0] <br><br>
  105. <b>Zamki w Prontera</b><br> $zamek16[0] <br> $zamek17[0] <br> $zamek18[0] <br> $zamek19[0] <br> $zamek20[0] <br> ";
  106.  
  107. ?>


Problem biggrin.gif
Zamiast logo gildi wyświetla mi nazwę czyli to co jest podpisane do obrazka jeśli go nie wyświetli np.
Kod
<img src="emblema.php?data=10034" alt="Destiny">
i tutaj problem co mam zrobić by dopisywało przed "emblema.php?data=10034" adres strony gdzie znajduję się ten plik.
Gość_nand
te wszystkie zamki mogłes wpisac do jednego arraya, wtedy mogłbyś ładniej to wyswietlic na koncu w petli foreach()

np

Kod
$exp = explode("Prontera Guindull",$strona);
$exp = explode("<tr>",$exp[1]);
$zamek[] = explode("</tr>",$exp[1]);


a jak juz wszystko bedziesz miał w kolejnych pozycjach arraya $zamek

Kod
foreach($zamek as $key => $one){
$one = preg_replace("/emblema\.php/","http://www.ethereal-ro.com/mycp/emblema.php",$one");
$zamek[$key] = $one;
}


moga byc jakies błedy bo nie wskukałem tego do swojego php... tak czy inaczej skoro chcesz miec dopisany pełny url w img_scr to zrób to przez operacje na stringach (preg_replace, explode)...
Gość_nand
no i nie musze chyba dodawac ze po powyszych transformacjach wynik masz w $zamek czyli

Kod
echo "zamki bla bla:<br>";

foreach ($zamek as $one)
echo $zamek . "<br>";
Gość_nand
znaczy
Kod
echo "zamki bla bla:<br>";

foreach ($zamek as $one)
echo $one. "<br>";
bibi
Dzięki, trochę poprawiłem to co napisałeś i działa ;s Wielkie dzięki, bardzo mi pomogłeś snitch.gif

Odrazu dam kodzik co zmieniłem i jak to ogólnie wygląda ;p
  1. <?php
  2. $ch = curl_init("http://www.ethereal-ro.com/mycp/guild.php");
  3.  
  4. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_HEADER, 1);
  6.  
  7. $strona = curl_exec($ch);
  8. curl_close($ch);
  9.  
  10. $zamek33 = explode("title\">Guild Castles",$strona);
  11. $zamek33 = explode("<table>",$zamek33[1]);
  12. $zamek33 = explode("</table>",$zamek33[1]);
  13.  
  14. foreach($zamek33 as $key => $one){
  15. $one = preg_replace("/emblema\.php/","http://www.ethereal-ro.com/mycp/emblema.php",$one);
  16. $zamek33[$key] = $one;
  17. }
  18.  
  19. foreach ($zamek33 as $one)
  20. echo "<table>$one</table>";
  21.  
  22. ?>
bibi
Jeszcze kilka pytań zadam ;p
Co zrobić, żeby nie wyświetlało dalej strony?
Na orginalnej stronie znajdują się na tej stronie, top 50 gildii oraz zamki jakie dana gildia posiada. Jak wyciagnać tylko Top 50? ;s I drugie pytanie, co zrobić, żeby wyswietlało obrazki, znaczy, wyświetla, ale gdy wejdę najpierw na orginalną stronę, chyba trzeba jakiś znacznik META dodać? :<

  1. <?php
  2. $ch = curl_init("http://www.ethereal-ro.com/mycp/guild.php");
  3.  
  4. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  5. curl_setopt($ch, CURLOPT_HEADER, 1);
  6.  
  7. $strona = curl_exec($ch);
  8. curl_close($ch);
  9.  
  10. $gildie = explode("Top 50",$strona);
  11. $gildie = explode("<table width=\"550\">",$gildie[1]);
  12. $gildie = explode("</table>",$gildie[1]);
  13.  
  14. foreach($gildie as $key => $one){
  15. $one = preg_replace("/emblema\.php/","http://www.ethereal-ro.com/mycp/emblema.php",$one);
  16. $gildie[$key] = $one;
  17. }
  18.  
  19. foreach ($gildie as $one)
  20. echo "<table>$one</table>";
  21.  
  22. ?>


Próbowałem np.
  1. <?php
  2. $gildie = explode("Top 50",$strona,"</tbody>");
  3. $gildie = explode("<table width=\"550\">",$gildie[1]);
  4. $gildie = explode("</table>",$gildie[1]);
  5. ?>


Ale wtedy się nic nie wyświetla >_>, jeszcze kilka innych sposobów zastosowałem i nic.
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-2024 Invision Power Services, Inc.