Перейти к содержанию
View in the app

A better way to browse. Learn more.

IT2B - Технологии разведки для бизнеса

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

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

 

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

но послушаем 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
  • Просмотры 18,8т
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано
  • Автор

ЧАСТЬ 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, сделать скриншоты и прислать их мне по электронной почте? Я на своем сайте из их и ваших двух постов сделаю страницу, гда оформлю этот текст с картинками в виде понятной для неопытных пользователей инструкции. Потом уточню непонятные вопросы и после этого возможно, будет понятнее, что с этим делать . Куда, скажем так, конкретно втыкать написанное. Такой вариант приемлем?

 

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

Опубликовано
  • Автор
М-да...

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

 

А потом подумал, что, возможно, со скриншотами и будет понятнее. Можно попросить, уважаемый 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: Особенно когда опыта нет.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.