Blog (76)
Komentarze (5.5k)
Recenzje (0)
@nintyfanŚledzenie zmian na stronach (#!/bin/bash).

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

14.11.2010 | aktual.: 17.11.2010 21:22

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.

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.

Wybrane dla Ciebie
Komentarze (18)