Sprawdzanie zmian na stronie WWW

0

Witam,
chciałbym napisać swój własny program, którym mógłbym monitorować zmiany na stronach WWW.
Pytanie, jaki jest najlepszy sposób na sprawdzanie takich zmian?
Myślałem, żeby pobierać URL strony i za każdym sprawdzeniem go porównywać.
Czytałem też coś o sprawdzaniu sumy CRC, na czym to polega i jak to się robi?
Jaki polecacie skuteczny sposób?
Pozdrawiam

0

Robisz tak:

  1. pobierasz zawartość witryny poprzez HTTP
  2. Liczysz sumę kontrolną, np. MD5, SHA1 lub SHA512, dla zawartości witryny.
  3. Porównujesz z poprzednią sumą.

Przykład w Ruby:

require 'net/http'
require 'digest'

url = URI.parse 'http://www.4programmers.net' # tu podajesz oczywiście adres swojej strony
req = Net::HTTP::Get.new url.path # tworzymy nowe zapytanie
res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) } # wysyłamy zapytanie do serwera
puts Digest::MD5.hexdigest res.body # tu wypluje Ci sumę MD5, którą trzeba porównać z zapisaną sumą

To działa dla tekstu, nie zadziała jeśli to będzie strona flash lub podmienią obrazki bez zmiany ich URL'i.

0

Tja, suma kontrolna, szczególnie w wypadu osadzania SIDów czy innych unikalnych wartości w źródle. To nie takie proste.

0

Może po prostu ściągaj całą zawartość strony do pliku, a przy sprawdzaniu aktualnej wersji porównuj ze ściągniętym plikiem?

0

@Pan kuba - wyjdzie na to samo co ja napisałem, tyle, że moje zżera mniej pamięci na dysku.
@deus - a jest jakiś sposób by to wyciąć? On tu napisał tak ogólnie jak by chciał porównywać dowolną możliwą stronę, a unikaty mogą być powstawiane w najróżniejsze i najdziwniejsze miejsca jakie to sobie webmaster wymyśli :/

0

Tak też zrobiłem. Program piszę w Javie.

  1. Wchodzę na stronę i pobieram cały tekst.
  2. Zapisuję go jako String
  3. Przy następnym sprawdzeniu znów pobieram cały tekst i zapisuję jako String
  4. Porównuję te dwa Stringi metodą equals

Rezultat: Nie zawsze działa poprawnie... Nawet, gdy monitoruję swoją stronę (nie wprowadzam żadnych zmian) to wyżej wymienione Stringi są różne, co wskazuje na jakieś zmiany.

0

Pokaż swoją stronę. Pewnie sporo w niej unikalnych generowanych na bieżąco identyfikatorów.

0

Stronę mam na yoyo.pl
Link: http://www.metallica-kolekcja.yoyo.pl/

0

Jakiś porównywacz plików zwrócił taki oto rezultat:

Por˘wnywanie plik˘w a.txt i B.TXT
***** a.txt
<!-- -->
<script type="text/javascript" src="http://ad.yoyo.pl/advertisements/lib.js"></script><div id="ml4gr96xtyhkhsfl" style="positio
n: absolute; width: 100%; top: 0pt; left: 0pt; z-index:99999"><div style="margin: 0pt auto; width: 750px; text-align: left; pad
ding: 1px 0pt; position: relative;">
 <!-- BBelements one2many Position: yoyo.pl(3524) / Pozostale(2) / Billboard(1) / billboard 750x100 750x100(30) -->
***** B.TXT
<!-- -->
<script type="text/javascript" src="http://ad.yoyo.pl/advertisements/lib.js"></script><div id="lr8p135notop79yqnc8o" style="pos
ition: absolute; width: 100%; top: 0pt; left: 0pt; z-index:99999"><div style="margin: 0pt auto; width: 750px; text-align: left;
 padding: 1px 0pt; position: relative;">
 <!-- BBelements one2many Position: yoyo.pl(3524) / Pozostale(2) / Billboard(1) / billboard 750x100 750x100(30) -->
*****

***** a.txt

        <div onclick="AD_Hide('ml4gr96xtyhkhsfl');" style="position: absolute; top: 0pt; right: -20px; cursor: pointer;">      

***** B.TXT

        <div onclick="AD_Hide('lr8p135notop79yqnc8o');" style="position: absolute; top: 0pt; right: -20px; cursor: pointer;">  

*****

***** a.txt
</div>
      <div id="ml4gr96xtyhkhsfl2" align="center" style="display:block; visibility: visible; background-color:#c31940; bottom:5p
x; clear:both; font-family:Arial,Helvetica,sans-serif; font-size:12px; left:0; padding: 0; position:fixed; width:100%; z-index:
99;">
      <SCRIPT TYPE="text/javascript" src="http://files.netsales.pl/kody/writeObject.js"></SCRIPT>
      <SCRIPT LANGUAGE=JavaScript>
      var Baner_File="http://files.netsales.pl/programy/68_Neckremann/545x30_clickTag_v5.swf";
      var Baner_FileBase=0;
      var Baner_URL="http://server.netsales.pl/z/1556/CD1210/&subid1=yoyo";
      var Baner_Special="?clickTag="+escape(Baner_URL);
      var Baner_Width=545;
      var Baner_Height=30;
      var Baner_Wmode="#FFFFFF";
      var Baner_Fdcdwc=1;
      </SCRIPT>

      <SCRIPT TYPE="text/javascript" src="http://files.netsales.pl/kody/bill.js"></SCRIPT>
      <div onclick="AD_Hide('ml4gr96xtyhkhsfl2');" style="position: fixed; bottom: 10px; right: 20px; cursor: pointer;">
        <img src="http://ad.yoyo.pl/img/kill.png" /> 
    </div>
</div>

***** B.TXT
</div>
<div id="lr8p135notop79yqnc8o2" align="center" style="display:block; visibility: visible; background-color:#000000; bottom:5px;
 clear:both; font-family:Arial,Helvetica,sans-serif; font-size:12px; left:0; padding:2px 0; position:fixed; width:100%; z-index
:99;">
       <SCRIPT TYPE="text/javascript" src="http://files.netsales.pl/kody/writeObject.js"></SCRIPT>
       <SCRIPT LANGUAGE=JavaScript>
       var Baner_File="http://files.netsales.pl/programy/64_IE8_biznes/biznes_650x30.swf";
       var Baner_FileBase=0;
       var Baner_URL="http://server.netsales.pl/z/1112/CD1210/&subid1=yoyo";
       var Baner_Special="?clickTag="+escape(Baner_URL);
       var Baner_Width=650;
       var Baner_Height=30;
       var Baner_Wmode="#FFFFFF";
       var Baner_Fdcdwc=1;
       </SCRIPT>
       <SCRIPT TYPE="text/javascript" src="http://files.netsales.pl/kody/bill.js"></SCRIPT>

        <div onclick="AD_Hide('lr8p135notop79yqnc8o2');" style="position: fixed; bottom: 10px; right: 20px; cursor: pointer;">
                <img src="http://ad.yoyo.pl/img/kill.png" />
                    </div>
                    </div>
            

*****

Co w przetłumaczeniu na ludzki:

linijka 14: <script type="text/javascript" src="http://ad.yoyo.pl/advertisements/lib.js"></script>

Losowa liczba</b>?" style="position: absolute; width: 100%; top: 0pt; left: 0pt; z-index:99999">
</p>

linijka 52: <div onclick="AD_Hide('Losowa liczba?');

57: <div id="Losowa liczba?"

71: <div onclick="AD_Hide('Losowa liczba?')

0

Meta tag z datą ostatniej aktualizacji?

0
HiIAmFromPoland napisał(a)

Meta tag z datą ostatniej aktualizacji?

Jeśli dobrze rozumiem, to on chce monitorować zmiany na stronach www, które NIE są pod jego kontrolą. Nie może więc dodać meta-tagów ani zadbać o to, by serwer zwracał dobre nagłówki. To poza jego kontrolą, więc jeśli autor strony się pod tym względem nie popisał, to lipa -- nie można tego użyć.


Takie zmienne IDN możesz na konkretnych stronach dość łatwo wyłuskać i po prostu usunąć choćby za pomocą wyrażeń regularnych (a w razie czego, można wyciągnąć cięższą artylerię: parser HTML/XML). Sęk w tym, że dodanie każdej nowej strony będzie trochę skomplikowane, bo będzie trzeba stworzyć nowe wyrażenie regularne lub wskazać parserowi zmienne elementy w strukturze dokumentu.

Inna opcja jest taka, żeby przy dodawaniu strony móc podać procentową identyczność, od której dokumenty uznawane są za takie same. Tj. np. podajesz, że jeśli dwa dokumenty będą np. w 97% zgodne ze sobą, to są uznawane za identyczne. Te pozostałe 3% zostawiasz na zmienne ID i inne drobnostki (np. "Wygenerowano w ciągu X sekund"). Ponieważ dla każdej strony miałbyś zdefiniowany taki procent, mógłbyś to łatwo dostosowywać. Sposób wygodniejszy niż usuwane konkretnych elementów, ale za to czasami może nie zadziałać i przeoczyć jakąś zmianę.

0

Czy znacie taki działający serwis on-line? Ja nie znalazłem, ale słyszałem, że jest program okienkowy.

0

Może httrack ma taką funkcjonalność.

0

A serwer nie umi zwrócić modified-since czy coś takiego?
Jak masz dostęp do php, to wysyłaj sobie np. w nagłówku datę pliku źródłowego.
[OOps, nie doczytałem wcześniej. Sorka.]

0

Naglowki http?

200 OK vs 304 Not Modified

1 użytkowników online, w tym zalogowanych: 0, gości: 1