Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Śledzenie zmian na stronach (#!/bin/bash).

Z uwagi na pojawianie się ostatnimi czasy wpisów użytkownika webnull na temat wykorzystania konsoli Uniksowej postanowiłem nieco dodać.

Skrypt jedynie testowałem na #!/bin/bash . Taki ze mnie specjalista, jak żaden - nawet nie mam pojęcia czy na standardowej powłoce(w systemie pozbawionym Basha) skrypt dałoby się uruchomić.

Co chcemy zrobić?

Chcemy śledzić w przyjemny i prosty sposób blogi użytkowników dobrych programów(by nam żaden wpis nie uciekł). Zauważyłem, że DobreProgramy (wcześniej: nie generują plików potrzebnych; powinno być przekreślone) generują pliki potrzebne do poprawnej pracy czytnikom/odbiorcom newsów.

r   e   k   l   a   m   a

Ponieważ lubię proste rozwiązania, a dodatkowo nie chcę nikogo zrazić, to skrypt będzie wykonywać podstawową czynność - sprawdzał, czy już była jakaś aktualizacja.
Do pracy
Najpierw musimy wiedzieć, co chcemy osiągnąć. Chcemy jedynie sprawdzić czy strona się zmieniła. Wymaga to (standardowo) pobrania jej na nasz dysk twardy. Odpowiedź czy nastąpiły jakieś zmiany od czasu ostatniego sprawdzenia dostarczy nam diff(program wyświetla różnicę w dwóch podanych plikach tekstowych).
Chcemy również otrzymywać przyjemne powiadomienia. Tutaj przyda nam się program notify-send.
Dodatkowo przydatne będzie narzędzie wget.
Instalujemy potrzebne zależności
W celu przystąpienia do pracy musimy się upewnić, że mamy zainstalowane wszystkie narzędzia. Bardzo proszę w tym celu uruchomić terminal i wpisać kolejno ich nazwy(separatorem będzie przejście do nowej linii - enter).


>wget
>notify-send
>diff

Jeżeli któregoś z tych programów nie mielibyśmy zainstalowanego, to system powinien nas poinstruować, co zrobić.
Rozwiązanie


#!/bin/bash

URL="http://www.dobreprogramy.pl/nintyfan"
name="nintyfan-blog"
if [ ! -e ${HOME}/.${name} ]; then
 wget  $URL -O ${HOME}/.${name}
else
 wget  $URL -O ${HOME}/.${name}.2
 if [ "`diff ${HOME}/.${name} ${HOME}/.${name}.2`" != "" ]; then
    notify-send "Zajrzyj na "${name}
    mv ${HOME}/.${name}.2 ${HOME}/.${name}
  fi
fi

Analiza
Jak zapewne się domyślacie, to linijka #!/bin/bash jest niemal, że obowiązkowa. Wskazuje ona jądru(lub linkerowi) interpretej do wykonania skryptu. Należy pamiętać, że rozszerzenia plików nie są niezbędne w innych systemach niż Windows. W Windows przyjęto konwencję, że każdy plik powinien mieć jakieś rozszerzenie. W systemach Uniksowych rodzaj pliku jest rozpoznawany po jego analizie.

URL, name są naszymi wewnętrznymi zmiennymi. W językach powłoki oznaczają po prostu: wszędzie tam, gdzie poproszę cię o podanie tej zmiennej, to wkleisz jej zawartość. Nazwy zmiennych wystarczy poprzedzić znakiem dolara. Dodatkowe klamerki są użyte, by powłoka wiedziała, co stanowi nazwę zmiennej(łączymy tekst ze zmiennej i z innym tekstem).

By połączyć tekst wystarczy jeden napisać obok drugiego:
"AAA""BBB"
Zostanie połączone do postaci AAABBB .
Należy pamiętać, że spacja pomiędzy takimi tekstami spowoduje, że nie zostaną one połączone. Będą traktowane, jako dwa oddzielne ciągi znaków. Dozwolone jest natomiast:
"AAA ""BBB"

W naszym skrypcie wywołujemy parę wcześniej wspomnianych programów. Nie będę tutaj jednak opisywać zupełnych podstaw programowania w powłoce(już i tak dosyć dużo w tym zagadnieniu napisałem).

Skrypt działa dosyć prosto: Pobieramy stronę z podanego adresu, zapisując wynik w naszym katalogu domowym + "/." + nazwa_bloga . Jeżeli plik istnieje, to zapisujemy tak pobrany skrypt pod inną nazwą (dodanie .2 ), a następnie porównujemy oba pliczki. W przypadku wykrycia różnic wyświetlamy określony komunikat (notify-send), a także nanosimy nowszą wersję na starszą.

To tyle na dzisiaj. 

Komentarze