Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt PHP monitorujacy strone w poszukiwania zmian na stronie bez RSS
Forum PHP.pl > Forum > PHP
adeks
Witam wszystkich, z racji że jest to mój pierwszy POST na tym forum.
Poszukuję skryptu w php, który pozwoli mi monitorować daną stronę w poszukiwaniu zmian na niej, mianowicie obserwuje bardzo dużo sklepów internetowych i chodzi mi o skrypt, który w razie zmiany statusu dostepności danego produktu w sklepie wyśle do mnie maila, sklepy stoją na zewnętrznych serwerach. W sieci znalazłem skrypt przyczym chciałem zapytać jak go przerobić by własnie monitorował status stanu produktu:

  1. <?php
  2. function check($host, $find) {
  3. $fp = fsockopen($host, 80, $errno, $errstr, 10);
  4. if (!$fp) {
  5. echo "$errstr ($errno)\n";
  6. } else {
  7. $header = "GET / HTTP/1.1\r\n";
  8. $header .= "Host: $host\r\n";
  9. $header .= "Connection: close\r\n\r\n";
  10. fputs($fp, $header);
  11. while (!feof($fp)) {
  12. $str .= fgets($fp, 1024);
  13. }
  14. fclose($fp);
  15. return (strpos($str, $find) !== false);
  16. }
  17. }
  18.  
  19. function alert($host) {
  20. mail('login@e-mail.com', 'Monitoring WWW', $host.' nie odpowiada.');
  21. }
  22.  
  23. $host = 'www.nfsec.pl';
  24. $find = 'Grid Focus';
  25. if (!check($host, $find)) alert($host);
  26. ?>


skrypt pochodzi ze strony: nfsec.pl/ nie jest mojego autorstwa.

Chodzi mi o monitorowanie takiej sytuacji jaka ma miejscie własnie np na tej stronie: http://sportbazar.pl/BUTY-JOMA-NUMERO-10-2...32,9584%29.aspx nie chce tu SPAMOWAC ani polecać, ma ktoś jakiś pomysł jak to rozwiązac?
kreatiff
Skrypt sprawdza wystąpienie frazy (definiowanej w $find) na stronie docelowej ($host), a to nie to samo co odczytanie stanu dostępności produktu. Ponadto widzę, że też wysyła jakieś alerty gdy serwer jest niedostępny.

Wg mnie do sprawdzania dostępności produktu na podstronie trzeba ciut więcej niż proste sprawdzanie strpos.
Pobraną stronę trzeba jakoś sparsować, w poszukiwaniu elementu, który określa stan magazynowy produktu lub jego brak. I to będzie zapewne inaczej wyglądało w kodzie dla różnych skryptów i szablonów sklepów.

Pobraną stronę trzeba sparsować w poszukiwaniu pożądanych elementów albo przy uzyciu DOMDocument albo wyrażeń regularnych i wynik podesłać ma maila.

Tak ja to widzę.
adeks
Chodzi mi głównie o sprawdzenie występowania danej frazy na stronie, w tym przypadku frazy "od ręki" jeżeli tej frazy nie nzjadzie ma przesłać mail,

  1. <?php $homepage = file_get_contents('http://testowanastrona.pl/costam.aspx', false, $context); $matches = strpos($homepage, "Od ręki"); if(empty($matches)) mail ($to, $subject, $message); ?>


przyczym z tego co zauważyłem skrypt wysyła do mnie za każdym razem mail czy znajdzie frazę czy też nie znajdzie frazy, ma ktoś może jakiś pomysł?
YourFrog
Poniższy kod powinien przesyłać ci prawidłowo informacje w momencie gdy ODNAJDZIE tekst na stronie.

  1. <?php
  2.  
  3. /**
  4.  * Klasa parametryzujaca informacje o stronie
  5.  */
  6. class Website
  7. {
  8. /**
  9. * Adres url strony
  10. * @var string
  11. */
  12. protected $url;
  13.  
  14. /**
  15. * Słowa których szukamy. Uwaga !! Trzeba uważać aby nie użyć słówa z kontentu stałego strony
  16. * @var string
  17. */
  18. protected $pattern;
  19.  
  20. /**
  21. * Wiadomość która prześle skrypt
  22. * @var string
  23. */
  24. protected $message;
  25.  
  26. /**
  27. * Konstruktor
  28. */
  29. public function __construct($url, $pattern, $message)
  30. {
  31. $this->url = $url;
  32. $this->pattern = $pattern;
  33. $this->message = $message;
  34. }
  35.  
  36. /**
  37. * Sprawdza czy słowo występuje na stronie
  38. * @return boolean
  39. */
  40. public function check()
  41. {
  42. $source = file_get_contents($this->url, false, stream_context_create(array('http'=>
  43. 'timeout' => 10, // 1 200 Seconds = 20 Minutes
  44. )
  45. )));
  46.  
  47. return (strpos($source, $this->pattern) !== FALSE);
  48. }
  49.  
  50. /**
  51. * Zwraca treść wiadomości
  52. * @return string
  53. */
  54. public function getMessage()
  55. {
  56. return $this->message;
  57. }
  58. }
  59.  
  60. // Twoja konfiguracja
  61. $websites = array(
  62. new Website('http://www.onet.pl', 'wiado', 'Zmiany na onet'),
  63. new Website('http://www.wp.pl', 'cos', 'Zmiany na wp'),
  64. );
  65.  
  66.  
  67. foreach($websites as $website)
  68. {
  69. if( $website->check() )
  70. {
  71. mail('test@test.pl', 'Change', $website->getMessage());
  72. }
  73. }
adeks
Dzięki za kod, przyczym za każdym razem wysyła komunikat pomimo, że nie znajduje też frazy na podstronie.

Cytat(YourFrog @ 11.03.2014, 14:19:06 ) *
Poniższy kod powinien przesyłać ci prawidłowo informacje w momencie gdy ODNAJDZIE tekst na stronie.

  1. <?php
  2.  
  3. /**
  4.  * Klasa parametryzujaca informacje o stronie
  5.  */
  6. class Website
  7. {
  8. /**
  9. * Adres url strony
  10. * @var string
  11. */
  12. protected $url;
  13.  
  14. /**
  15. * Słowa których szukamy. Uwaga !! Trzeba uważać aby nie użyć słówa z kontentu stałego strony
  16. * @var string
  17. */
  18. protected $pattern;
  19.  
  20. /**
  21. * Wiadomość która prześle skrypt
  22. * @var string
  23. */
  24. protected $message;
  25.  
  26. /**
  27. * Konstruktor
  28. */
  29. public function __construct($url, $pattern, $message)
  30. {
  31. $this->url = $url;
  32. $this->pattern = $pattern;
  33. $this->message = $message;
  34. }
  35.  
  36. /**
  37. * Sprawdza czy słowo występuje na stronie
  38. * @return boolean
  39. */
  40. public function check()
  41. {
  42. $source = file_get_contents($this->url, false, stream_context_create(array('http'=>
  43. 'timeout' => 10, // 1 200 Seconds = 20 Minutes
  44. )
  45. )));
  46.  
  47. return (strpos($source, $this->pattern) !== FALSE);
  48. }
  49.  
  50. /**
  51. * Zwraca treść wiadomości
  52. * @return string
  53. */
  54. public function getMessage()
  55. {
  56. return $this->message;
  57. }
  58. }
  59.  
  60. // Twoja konfiguracja
  61. $websites = array(
  62. new Website('http://www.onet.pl', 'wiado', 'Zmiany na onet'),
  63. new Website('http://www.wp.pl', 'cos', 'Zmiany na wp'),
  64. );
  65.  
  66.  
  67. foreach($websites as $website)
  68. {
  69. if( $website->check() )
  70. {
  71. mail('test@test.pl', 'Change', $website->getMessage());
  72. }
  73. }


Udalo mi się dostać plik xml sklepu, który jest pod adresem: http://e-hurtowniasportowa.pl/ShowXml.ashx?id=3 w prztpadku braku towaru nie znajduje się on w tym pliku. Czy jest możliwość przeszukiwania tylko tego pliku w poszukiwaniu występowania danej frazy?
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.