После утверждения ссылки веб-мастером оптимизатор может изменить свою страницу, разместив на ней рекламу порнухи, наркотиков и чего угодно еще. Из-за этого возникает необходимость эпизодически контролировать контент страниц, на которые установлена ссылка. Адреса всех ссылок есть в linkfeed.links.db , нежелательный контент у каждого есть в стоп-словах.
Приведенная ниже программа проверяет наличие нежелательных слов из массива @riks на страницах сайтов, на которые установлены ссылки.
Работа с программой. Скопируйте текст скрипта в любой редактор, поддерживающий формат unix. Перенесите в массив @riks все нежелательные слова, подлежащие проверке. Сохраните скрипт с любым именем и расширением pl в любой папке, где разрешено выполнение perl. Не забудте установить права на файл. В эту же папку сохраните файл linkfeed.links.db. Запустите скрипт. В первую очередь будет создан файл report.txt и в нем будет сформирована заготовка отчета из 3 столбцов, - ваша страница, ссылка, текст ссылки. Для удобства дальнейшего переноса данных из report.txt для анализа в excel столбцы разделены табуляцией. По мере выполнения скрипта данные о найденных нежелательных словах будут вноситься в четвертую колонку report.txt . Если захотите повторить анализ, удалите файл report.txt . В случае зависания скрипта нажмите кнопку "обновить" в своем браузере. Скрипт сам найдет точку продолжения. Скорость работы скрипта - примерно 3000 страниц в час.

Просьба поделиться результатами анализа.
-------------------------------------------------------------------------------------------------
#!/usr/bin/perl -w

use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
use LWP::Simple;

$| = 1;
print "Content-Type: text/html\n\n";


my $data;
my @buf;
my @s; ################################################## #######
my $n; # Программа анализа содержания страниц оптимизаторов. #
my $m; # на входе linkfeed.links.db , на выходе report.txt #
my $a; ################################################## #######

my $url;
my $href;
my $txt;
my $res;

my @riks = ( "секс", "порно", "бдсм", "варез", "сиалис", "наркотик" );


################################################## ########## первичная обработка linkfeed.links.db

if( -e "report.txt" ) { goto cnt; } # если отчет есть, то перейти к нему
open FILE, "linkfeed.links.db"; read(FILE, $data, 9999999); close FILE; # прочитать файл ссылок
open FILE, ">report.txt"; # открыть файл отчета

@buf=split (/}s:/,$data); $#buf-=2; # разделить постранично

for($n=0;$n<=$#buf;$n++)
{
($a)=$buf[$n]=~/[^"]*.([^"]*).*/; # выделить урл страницы, где установлена ссылка
@s=split (/a href="/,$buf[$n]); # разделить поссылочно, в элементах начиная с 1-ого href и текст ссылки
for($m=1;$m<=$#s;$m++)
{
($href,$txt)=$s[$m]=~/([^"]*)[^>]*.([^<]*).*/; # выделить href и текст ссылки
print FILE $a."\t".$href."\t".$txt."\n"; # сохранить начало отчета - старница, href, текст ссылки
}
}
close FILE;

################################################## ########## выделение в отчете текущей строки

cnt:

$#buf=-1;
open FILE, "report.txt"; @buf=<FILE>; close FILE; # прочитать начало отчета - старница, href, текст ссылки
for($n=0;$n<=$#buf;$n++)
{
$#s=-1; @s=split (/\t/,$buf[$n]); # проверить сколько элементов в строке
if($#s==2)
{
($url,$href,$txt)=$buf[$n]=~/([^\t]*).([^\t]*).([^\n]*).*/; # выделить элементы отчета
$buf[$n]=$url."\t".$href."\t".$txt."\t"."* не отвечает *\n"; last; # защита от зависания get
}
}
open FILE, ">report.txt"; print FILE @buf; close FILE; # сохранить текущее состояние отчета

print "<script type=text/javascript>document.title='Site ".($n+1)." from ".($#buf+1)."'</script>\n"; # индикация в тайтле

################################################## ########## подготовка перезапуска

if($n<$#buf)
{
print "<form method=POST action=http://",$ENV{'SERVER_NAME'},$ENV{'PATH_INFO'},$ENV{'SCRI PT_NAME'}; # время ожидания get не более 20 секунд
print " id=continue_form style=\"visibility: hidden;\">\n</form>\n";
print "<script type=text/javascript>setTimeout(\"window.continue_form.submi t()\", 20000);</script>\n";
}

################################################## ########## чтение страницы и анализ вхождений

$a = get($href); # считали очередную страницу, перевести все в нижний регистр

$a=~s/А/а/g; $a=~s/Б/б/g; $a=~s/В/в/g; $a=~s/Г/г/g; $a=~s/Д/д/g; $a=~s/Е/е/g; $a=~s/Ё/е/g; $a=~s/Ж/ж/g; $a=~s/З/з/g; $a=~s/И/и/g; $a=~s/Й/й/g;
$a=~s/К/к/g; $a=~s/Л/л/g; $a=~s/М/м/g; $a=~s/Н/н/g; $a=~s/О/о/g; $a=~s/П/п/g; $a=~s/Р/р/g; $a=~s/С/с/g; $a=~s/Т/т/g; $a=~s/У/у/g; $a=~s/Ф/ф/g;
$a=~s/Х/х/g; $a=~s/Ц/ц/g; $a=~s/Ч/ч/g; $a=~s/Ш/ш/g; $a=~s/Щ/щ/g; $a=~s/Ъ/ъ/g; $a=~s/Ы/ы/g; $a=~s/Ь/ь/g; $a=~s/Э/э/g; $a=~s/Ю/ю/g; $a=~s/Я/я/g;
$a=lc $a;

$res=" ";
for($m=0;$m<=$#riks;$m++)
{
if( (index $a, $riks[$m]) >= 0 ) { $res.=$riks[$m]." "; } # если нашли занозу
}

$buf[$n]=$url."\t".$href."\t".$txt."\t".$res."\n"; # полный отчет по текущему элементу
open FILE, ">report.txt"; print FILE @buf; close FILE; # сохранить полный отчет

################################################## ########## индикация на экран и быстрый перезапуск

if($res eq " ") { print "Ok"; } else { print $href." &nbsp; ".$res; } # индикация на экран
if($n<$#buf)
{
print "<script type=text/javascript>setTimeout(\"window.continue_form.submi t()\", 50);</script>\n"; # перейти к следующей странице
}

exit;