Kategoria: Pozycjonowanie

Seo Adder sprawdzanie niedziałających urli

2008 Luty 15 – 13:58

Ten skrypcik ma na celu sprawdzenie czy urle w naszej bazie są w ogóle aktualne. Naturalnie jeśli domena lub serwer nie działa to nie ma wątpliwości. Zdarza się jednak błąd 404 – strona nie istnieje, znaczy to najczęściej że strona została usunięta i nie ma sensu dalej trzymać jej w bazie Addera.

Nieistniejące strony bardzo zwalniają proces dodawania, szczególnie jeśli długo się timeoutują.

Skrypt nie ustawia na noc jeśli występuje błąd 403 „wejście zabronione” lub strona sie wytimeoutuje. Naturalnie można to zmienić. Co do timeoutu sprawa jest bardziej skomplikowana, ponieważ timeout może powstawać np przy chwilowym braku internetu lub przeciążeniu łącza/serwera, co nie zawsze odpowiada temu że katalog nie działa.

UWAGA: Skrypt nie usuwa wpisów z bazy, jedynie ustawia typ na noc (no connection, czyli brak połączenia). Strony bez połączenia można potem obejrzeć w menu Addera -> Adresy URL, z którymi brak połączenia.
Domyślnie skrypt

OBSŁUGA: Skryptowi po ściągnięciu należy nadać prawa uruchamiania i uruchamiać z poziomu powłoki:
./mark_noconn
lub lepiej
nohup ./mark_noconn &
co spowoduje uruchomienie go w tle.

Tak więc oto obiecany skrypcik:

#!/bin/bash###############
# skrypt oznaczajacy niepoprawne wpisy z bazy
# Jedrzej Schmeidel - Yunnan
# www.yunnan.tk
# Licencja GNU GPL
# uzywanie na wlasna odpowidzialnosc !!!
###############
#### konfiguracja bazy
baza='nazwa_bazy';
user='user';
haslo='haslo';
### ile kopii sprawdzacza ma zostac uruchomionych
## minimum 2 - bardzo powolne sprawdzanie (jedna strona na raz)
## zalecane 5-10
## maximum 20 - szybkie sprawdzanie
## moze da sie wiecej, ale jest ryzyko blednej oceny jako timeout na slabym laczu
ile=5;
#### w tym katalogu beda zapisywane odpowiedzi z headerow
mkdir header
rm header/*
#### tworzenie listy urli do sprawdzenia
lista=`mysql -u$user -p$haslo $baza --skip-column-names -e "select url from adder_url;";`;#### petla glowna
for i in $lista; do
#### w nawiasie jest proces ktory bedzie uruchamiany w wielu kopiach
(nr=`mysql -u$user -p$haslo $baza --skip-column-names -e "select url_id from adder_url where url='$i' limit 1;";`;
wget --spider --tries=5 --waitretry=5 --timeout=5 --user-agent="Mozilla/5.0 (X11; U; Linux i686; pl-PL; rv:1.7.10) \
Gecko/20050717 Firefox/1.0.6" -S --no-http-keep-alive $i -o header/$nr;
header=`tail -n2 header/$nr | grep 0 | sed 's/^.*ERROR//g' | sed 's/[^(0-9)]//g' | cut -b-3`;
case $header in
200)
## odpowiedz poprawna, strona istnieje
echo $nr - $i - OK;
echo $nr >> ls_ok;
;;
404)
## strona nie istnieje, np usunieta
echo $nr - $i - Do not exist;
mysql -vvv -u$user -p$haslo $baza --skip-column-names -e "update adder_url set typ='noc' where url like '$i' limit 1;";
;;
403)
## strona zabroniona, np zabanowana
echo $nr - $i - Forbidden;
echo $nr >> ls_forbidden;
;;
*)
## pozostale przypadki
if [[ `cat header/$nr | grep 'failed: Name or service not known'` ]]; then
## serwer nie istnieje, domena nie dziala
echo $nr - $i - No connection;
mysql -vvv -u$user -p$haslo $baza --skip-column-names -e "update adder_url set typ='noc' where url like '$i' limit 1;";
else
## reszta przypadkow np. serwer timeout, 500 itp
echo $nr - $i - ??? - $header;
echo $nr >> ls_dziwne;
fi;;
esac;
)&
#### kontrola ilosci uruchomionych instancji
while [ `ps -AF | grep '\-o header/' -c` -gt $ile ]; do
sleep 2;
echo za duzo uruchomionych;
done;
sleep 0.2;
done;

Możliwe że powyżej się poucinały linie itp, więc najbezpieczniej jest go ściągnąc sobie stąd -> mark_noconn.

  1. 3 komentarze to “Seo Adder sprawdzanie niedziałających urli”

  2. Skrypt w jaki sposób powinien być uruchamiany?
    Zapisać go jako plik o jakim rozszerzeniu?
    na hostingu np. home.pl pójdzie?

    By Adder on Lut 16, 2008

  3. Dorzucilem plik zrodlowy do sciagniecia na samym dole. Nalezy go uruchamiac normalnie z poziomu powloki.
    Ja na swoim hostingu mam dostep do ssh, wiec spokojnie moge ten skrypt uruchomic.
    Ale na home.pl itp, sa pewnie ograniczenia czasu uruchomionego procesu… wiec moze sie nie udac nawet przez php exec(), system() itp…

    By Yunnan on Lut 16, 2008

  4. O dzięki za info 🙂 To się na pewno przyda, zaraz potestujemy.

    By Vojtas on Lis 14, 2012

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *