Перейти к содержанию

Websitewatcher - программа для мониторинга Интернет


Рекомендуемые сообщения

Букмарк - это "Закладка". Та строчка, которая, собственно, и мониторится на предмет изменений.

 

А вот "как написать скрипт" - это, я боюсь, очень сложный вопрос.

но послушаем Vinni, конечно.

 

Итак, начинаем :smile7:

 

Задача 1. Сохранить не только последнюю и предпоследнюю версии контролируемой веб-страницы (закладки, букмарка, bookmark :smile1: ), но и все предыдущие в отдельных файлах.

 

Формат хранения информации в архиве

-для каждой закладки создается отдельная директория с именем, соответствующим имени закладки в WSW, в которой для каждой версии веб-страницы хранится два файла со следующими именами, основанными на дате-времени создания данной версии веб-страницы (например, 200805061645 - 2008 год, месяц - 05, день - 06, час - 16, минуты - 45)

-дата_время_создания-версии.html - HTML-версия страницы

-дата_время_создания-версииchg.html - HTML-версия страницы, в которой желтым цветом выделены изменения в данной версии по сравнению с предыдущей

-для получения информации о том, какой директории какой URL соответствует, создается конфигурационный текстовый файл следующего формата (одна строка - одна закладка)

- имя (из свойств закладки в WSW) (например, Yandex) - это имя поддиректории в архиве!

- URL (например, http://www.yandex.ru)

-дата-время последнего обновления страницы в том же формате (например, 200805061645)

 

 

Для поиска информации по рубрикам предлагаю использовать Yandex Desktop Search - можно запланировать разработку другого скрипта для автоматизации создания списка страниц по той или иной рубрике, заданной поисковым запросом в YDS. :smile3:

 

ЧАСТЬ 1.

 

Решение:

1) установить интерпретатор языка Perl и указать при установке, чтобы была создана файловая ассоциация для расширения .pl (чтобы при открытии такого файла запускался интерпретатор Perl и выполнял скрипт в этом файле)

 

2) поместить все закладки, для которых нужно сохранять историю в специально созданную для этого папку (folder) в WSW (в моем случае - WebSite-Watcher)

 

3) создать специальную директорию на диске, где будут размещены скрипты и результаты их работы (в моем случае - d:\wsw) и поддиректории

arc - для хранения веб-страниц (в ней создать пустой файл url.info для хранения конфигурационной информации)

rep - для хранения созданных отчетов WSW

 

4) так как информация об изменениях в страницах будет получаться от WSW с помощью встроенных в него отчетов(report), то нужно в этой директории создать файл с отчетом следующего содержания (важно, чтобы он имел ровно три строки, так как скрипт рассчитывает на это!)

{wsw_dateformat(yyyymmddhhnn)}{wsw_report_date}

{wsw_begin_url}"{wsw_url_name}","{wsw_url_url}","{wsw_url_date_changed}","{wsw_url_path_filename}","{wsw_url_path_filename_chg}"

{wsw_end_url}

Директива {wsw_dateformat(yyyymmddhhnn)} задает форматы даты в отчете (значение в этом формате служит основой при формировании имени файла с версией веб-страницы! ), а {wsw_report_date} выводит в отчет текущую дату время.

Далее между {wsw_begin_url} и {wsw_end_url} помещено описание формата, в котором будет выведена информация о каждой измененной закладке (каждое поле заключается в кавычки и разделяется запятыми)

{wsw_url_name} - имя закладки из ее свойств в WSW

{wsw_url_url} - URL закладки (или поисковый запрос)

{wsw_url_date_changed} - дата-время последнего изменения страницы

{wsw_url_path_filename} - полный путь к файлу с последней версией страницы в хранилище страниц WSW

{wsw_url_path_filename_chg} - полный путь к файлу с последней версией страницы с подсвеченными изменениями в хранилище страниц WSW

 

5) создать следующий скрипт WSW и поместить его в файл с именем save_history.wws

CheckFolder "WebSite-Watcher" /subfolder

if GetUpdatedBookmarkCount=0 then goto NoUpdates

$filename = GetDateTime("yyyymmddhhnn")

$filename = "d:\wsw\rep\" + $filename

CreateReport /template="d:\wsw\report.template" /output="{$filename}" /bookmarks=changed

RunProgram "d:\wsw\save.pl" /parameter="{$filename}"

Label NoUpdates

Quit

 

>CheckFolder "WebSite-Watcher" /subfolder

проверить закладки в папке WebSite-Watcher со всеми ее подпапками (/subfolder )

>if GetUpdatedBookmarkCount=0 then goto NoUpdates

если изменений в закладках нет - прекратить работу

> $filename = GetDateTime("yyyymmddhhnn")

> $filename = "d:\wsw\rep\" + $filename

иначе сформировать имя файла, в котором будет храниться отчет об изменениях в страницах

>CreateReport /template="d:\wsw\report.template" /output="{$filename}" /bookmarks=changed

создать отчет по шаблону в "d:\wsw\report.template", вывести в него информацию только об изменившихся закладках (/bookmarks=changed)

>RunProgram "d:\wsw\save.pl" /parameter="{$filename}"

запустить внешнюю программу на Perl для анализа отчета и переноса текущих версий закладок в новый архив

>Label NoUpdates

>Quit

прекратить работу WSW

 

Запускать этот скрипта нужно командой

"C:\Program Files\WebSite-Watcher\wswatch.exe" /SCRIPT="d:\wsw\save_history.wws"

 

 

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 47
  • Создана
  • Последний ответ

ЧАСТЬ 2

 

Для удобства я собрал все файлы в архиве, приложенном к сообщению - надо распаковать его в директорию d:\wsw

 

Скрипт на Perl

 

#!/usr/bin/perl -w

use strict;

my $ARC_DIR='d:/wsw/arc/';

my $urlfile=$ARC_DIR."url.info";

my %uinfo=(); my %uchanged=();

 

if ($ARGV[0] ne "") {

my $fname=$ARGV[0];

&load_urls($urlfile);

&load_report($fname);

&save_urls($urlfile);

}

exit(0);

sub load_urls {

my ($uname)=@_;

open(U,$uname);

while (<U>) {

chomp;

my @ulist=split(/\t/);

next if $ulist[0] eq "" || $ulist[1] eq "";

$uinfo{$ulist[1]}=$ulist[0];

$uchanged{$ulist[1]}=$ulist[2];

}

close(U);

}

sub save_urls {

my ($uname)=@_;

open(U,">$uname");

for my $url (keys %uinfo) {

next if $url eq "";

print U $uinfo{$url},"\t",$url,"\t",$uchanged{$url},"\n";

}

close(U);

}

 

sub load_report {

my ($repname)=@_;

open(R,$repname);

my $rdatetime=<R>;

while (<R>) {

chomp;

my $rstr=$_;

if ($rstr=~/^\"(.*)\",\"(.*)\",\"(.*)\",\"(.*)\",\"(.*)\"$/) {

my $urlname=$1;my $url=$2;my $urlchg=$3; my $fpname=$4; my $fpchgname=$5;

next if $uchanged{$url} eq $urlchg;

$uinfo{$url}=$urlname; $uchanged{$url}=$urlchg;

my $save_dir=$ARC_DIR.$urlname;

if (!(-e $save_dir)) {

mkdir($save_dir);

}

$fpname=~/^file:\/\/(.+)$/;$fpname=$1;

open(F,$fpname);my @newpage=<F>;close(F);

my $foutname=$save_dir."/".$urlchg.".html";

open(P,">$foutname");print P @newpage;close(P);

$fpchgname=~/^file:\/\/(.+)$/;$fpchgname=$1;

open(F,$fpchgname);my @newchgpage=<F>;close(F);

my $foutchgname=$save_dir."/".$urlchg."chg.html";

open(P,">$foutchgname");print P @newchgpage;close(P);

}

}

close ®;

}

 

и комментарии к нему

 

>my $ARC_DIR='d:/wsw/arc/';

имя директории, где хранится архив

>my $urlfile=$ARC_DIR."url.info";

имя файла, где хранится соответствие между именами закладок и их URL

>my %uinfo=(); my %uchanged=();

инициализация хэш-массивов

 

>if ($ARGV[0] ne "") {

> my $fname=$ARGV[0];

имя файла с отчетом WSW передается первым параметром командной строки

>&load_urls($urlfile);

вызов процедуры загрузки конфиг. файла

>&load_report($fname);

анализ файла с отчетом и добавление новых версий страниц в архив

>&save_urls($urlfile);

сохранение новой версии конфиг. файла

>}

>exit(0);

конец программы

 

>sub load_urls {

> my ($uname)=@_;

имя конфиг. файла передается параметром процедуре

> open(U,$uname);

открываем файл

> while (<U>) {

в цикле читаем все строки

> chomp;

удаляем символ переноса строки

> my @ulist=split(/\t/);

разбиваем строку на части с помощью разделителя (символа табуляции - \t)

формат строки

-название закладки

-URL

-дата-время последнего изменения

> next if $ulist[0] eq "" || $ulist[1] eq "";

проверка на корректность данных в строке

> $uinfo{$ulist[1]}=$ulist[0];

сохраняем информацию в хэш-массивах.

uinfo - хранит соответствие между URL и именем закладки

> $uchanged{$ulist[1]}=$ulist[2];

uchanged - хранит соответствие между URL и датой-временем последнего обновления закладки

> }

> close(U);

закрываем файл и выходим из процедуры

>}

>sub save_urls {

> my ($uname)=@_;

имя конфиг. файла передается параметром процедуре

> open(U,">$uname");

открываем файл для записи (старое содержимое уничтожается)

> for my $url (keys %uinfo) {

> next if $url eq "";

> print U $uinfo{$url},"\t",$url,"\t",$uchanged{$url},"\n";

сохраняем в цикле информациб о каждой закладке в отдельной строке конфиг. файла

> }

> close(U);

закрываем файл и выходим из процедуры

>}

 

>sub load_report {

> my ($repname)=@_;

имя файла с отчетом передается параметром процедуре

> open(R,$repname);

открываем файл

> my $rdatetime=<R>;

читаем первую строку - там дат-время создания отчета (пока не нужно - может быть пригодится в будущем)

> while (<R>) {

в цикле читаем все строки отчета. каждая строка содержит информацию об отдельной закладке

> chomp;

> my $rstr=$_;

сохраняем строку в переменной $rstr

> if ($rstr=~/^\"(.*)\",\"(.*)\",\"(.*)\",\"(.*)\",\"(.*)\"$/) {

выделяем с помощью регулярного выражения отдельные поля строки (сохраняются как переменные $1..$5)

> my $urlname=$1;my $url=$2;my $urlchg=$3; my $fpname=$4; my $fpchgname=$5;

сохраняем поля строки отчета в рабочих переменных

> next if $uchanged{$url} eq $urlchg;

если закладка не обновлялась (время последнего изменения из конфиг. файла совпадает со временем обновления из отчета) больше ничего не делаем и переходим на обработку следующей строки отчета

> $uinfo{$url}=$urlname; $uchanged{$url}=$urlchg;

сохраняем информацию о закладке в хэш-массивах

> my $save_dir=$ARC_DIR.$urlname;

формируем имя поддиректории, куда будут сохраняться веб-страницы

> if (!(-e $save_dir)) {

> mkdir($save_dir);

если ее нет, создаем ее

> }

> $fpname=~/^file:\/\/(.+)$/;$fpname=$1;

получаем с помощью регулярного выражения имя файла (WSW указывает имена в формате URL с префиксом file://)

> open(F,$fpname);my @newpage=<F>;close(F);

читаем содержимое страницы в список @newpage

> my $foutname=$save_dir."/".$urlchg.".html";

формируем имя файла в архиве, куда будет сохранено содержимое веб-страницы

> open(P,">$foutname");print P @newpage;close(P);

сохраняем содержимое веб-страницы в этот файл

> $fpchgname=~/^file:\/\/(.+)$/;$fpchgname=$1;

получаем с помощью регулярного выражения имя файла для страницы с показом изменений(WSW указывает имена в формате URL с префиксом file://)

> open(F,$fpchgname);my @newchgpage=<F>;close(F);

читаем содержимое страницы в список @newchgpage

> my $foutchgname=$save_dir."/".$urlchg."chg.html";

формируем имя файла в архиве, куда будет сохранено содержимое веб-страницы

> open(P,">$foutchgname");print P @newchgpage;close(P);

сохраняем содержимое веб-страницы в этот файл

> }

> }

> close®;

>}

 

wsw.zip

Ссылка на комментарий
Поделиться на другие сайты

М-да...

Сначала я хотел просто констатировать свою неспособность использовать прочитанное.

 

А потом подумал, что, возможно, со скриншотами и будет понятнее. Можно попросить, уважаемый Vinni, сделать скриншоты и прислать их мне по электронной почте? Я на своем сайте из их и ваших двух постов сделаю страницу, гда оформлю этот текст с картинками в виде понятной для неопытных пользователей инструкции. Потом уточню непонятные вопросы и после этого возможно, будет понятнее, что с этим делать . Куда, скажем так, конкретно втыкать написанное. Такой вариант приемлем?

 

Конечно, может быть, это просто я такой непонятливый, но боюсь, что многие, как и я, в скриптах вообще ничего не понимают.

Ссылка на комментарий
Поделиться на другие сайты

М-да...

Сначала я хотел просто констатировать свою неспособность использовать прочитанное.

 

А потом подумал, что, возможно, со скриншотами и будет понятнее. Можно попросить, уважаемый Vinni, сделать скриншоты и прислать их мне по электронной почте? Я на своем сайте из их и ваших двух постов сделаю страницу, гда оформлю этот текст с картинками в виде понятной для неопытных пользователей инструкции. Потом уточню непонятные вопросы и после этого возможно, будет понятнее, что с этим делать . Куда, скажем так, конкретно втыкать написанное. Такой вариант приемлем?

 

Конечно, может быть, это просто я такой непонятливый, но боюсь, что многие, как и я, в скриптах вообще ничего не понимают.

Господи, а как же питона прикармливать собирались все? :smile2:

Скриншоты сделаю завтра, а пока попробую в армейском :smile5: стиле, а вы говорите, на каком шаге пошли проблемы.

 

1. Скачать и установить Perl c http://www.activestate.com/Products/activeperl/

2. Скачать и установить WebSiteWatcher

2. Скачать архив из предыдущего поста и развернуть его содержимое в директорию d:\wsw

3. Запустить WSW и создать в нем папку(folder) с именем WebSite-Watcher (если ее нет)

4. Добавить в папку закладку с именем Yandex и URL http://www.yandex.ru

5. Добавить в папку закладку с именем RBC и URL http://www.rbc.ru

6. Завершить WSW

7. Запустить файл d:\wsw\wsw.bat

8. Посмотреть содержимое поддиректорий в d:\wsw\arc - там появятся новые файлы с веб-страницами

Повторять шаги 7 и 8 несколько раз с интервалом не менее минуты.

 

Про автоматизацию запуска wsw.bat рассказать? :smile19:

 

 

Ссылка на комментарий
Поделиться на другие сайты

Господи, а как же питона прикармливать собирались все? :smile2:

Скриншоты сделаю завтра, а пока попробую в армейском :smile5: стиле, а вы говорите, на каком шаге пошли проблемы.

.....

Про автоматизацию запуска wsw.bat рассказать? :smile19:

:smile12: Он еще и издевается.... - не прикрмился Питон. Вообще дикие звери плохо поддаются одомашниванию :smile6: Особенно когда опыта нет.

Ссылка на комментарий
Поделиться на другие сайты

Заархивировано

Эта тема находится в архиве и закрыта для дальнейших ответов.


×
×
  • Создать...