Отслеживание изменений на сайте!

Обсуждение программ nnCron и nnCron LITE

Re: Отслеживание изменений на сайте!

Postby I1iF » Fri, 11 Nov 2011, 14:14

Вот эта задача:
Code: Select all
#( t_glav_dor_U
NoActive
Time: */30 * * * * *
SingleInstance
Rule: ONLINE?
;
0 VALUE zhtml
100000 ALLOCATE THROW TO zhtml
fVAR glav_dor_u
Action:
S" http://torrents.local/forum/viewtopic.php?p=3673499" HTTP-GET 0=
IF
   2DUP zhtml ZPLACE
   S" /(292645\x22\>)?#9.+(<\/a><\/h1>)?=/i" RE-ALL
      $0 glav_dor_u COMPARE 0<>
      IF
         $0 TO glav_dor_u
    S" http://torrents.local/forum/viewtopic.php?p=3673499" \ текст
    S" Главная дорога R" \ тема
    S" ***" \ mail кому
    S" ***" \ mail от кого
    S" ***" \ логин
    S" ***" \ пароль
    S" ***" 25 \ адрес smtp сервера и порт
    SMTP-SEND&ATTACH ?DUP IF MSG: "ошибка отправки: %0 esPICK%" THEN
      ELSE
      THEN
   ;RE-ALL
ELSE
   2DROP
   16 S" checking_for_new_porn" DROP S" Ошибка загрузки страницы" DROP 0 MessageBoxA DROP
THEN
)#

Файл создается, то что ищется в файле есть, но до сравнения не доходит - появляется ошибка "1073741819"
User avatar
I1iF
 
Posts: 34
Joined: Fri, 25 Jan 2008, 12:32

Re: Отслеживание изменений на сайте!

Postby Morituruz » Fri, 11 Nov 2011, 15:08

Сделал на основе ini.spf, т.к. показалось оптимальным вариантом:
Code: Select all
#( get_updates
NoLog
\ каждые 2 часа
Time: ? */2 * * * *
SingleInstance
Rule: ONLINE?
;
VARIABLE up_list
0 VALUE zhtml
\ 100 кБ на страничку должно хватить:
100000 ALLOCATE THROW TO zhtml
: INI-GET-TEXT S" text" INI-GET-VALUE
;
: get_update NodeValue ASCIIZ> INI-SECTION
\ проверка на наличие параметров:
S" url" INI-GET-VALUE S" default value" COMPARE 0<>
S" re" INI-GET-VALUE S" default value" COMPARE 0<>
AND
IF
   S" url" INI-GET-VALUE HTTP-GET 0=
   IF
      2DUP zhtml ZPLACE
      \ ищем по регэкспу из параметра
      S" re" INI-GET-VALUE EVAL-SUBST RE-ALL
         \ сравниваем найденное (если нашлось конечно) с сохранённой строчкой
         $0 S" text" INI-GET-VALUE COMPARE 0<>
         IF
            \ если не совпадает, спрашиваем
            36 S" get_updates" DROP S" Было:%crlf%%INI-GET-TEXT%%crlf%Стало:%crlf%%$0%%crlf%%crlf%Сохранить?" EVAL-SUBST DROP 0 MessageBoxA 6 =
            IF
               \ если нажимаем да, то новый заголовок сохраняем
               S" text" $0 INI-SET-VALUE
            THEN
         ELSE
            \ заголовок темы не изменился:
            \ MSG: "Без изменений"
         THEN
      ;RE-ALL
   ELSE
      2DROP
      \ не получилось скачать
      16 S" get_updates" DROP S" Ошибка загрузки страницы" DROP 0 MessageBoxA DROP
   THEN
ELSE
   \ не все параметры в секции указаны
   48 S" get_updates" DROP S" Не все параметры указаны." DROP 0 MessageBoxA DROP
THEN
\ MSG: "end"
;
Action:
\ путь до ini файла
S" c:\nncron\check.ini" INI-FILENAME
\ какие секции из ini файла включаем в проверку
Z" sp" up_list AppendNode
\ Z" 2" up_list AppendNode
\ Z" 3" up_list AppendNode

\ убираем за собой:
['] get_update up_list DoList
['] f-free up_list DoList
up_list FreeList
)#


структура ini-файла описана тут:
http://ru.wikipedia.org/wiki/Ini
Примерно так:
Code: Select all
[sp]
url=http://rutracker.org/forum/viewtopic.php?t=3550420
re=/(3550420\x22\>)?#9.+(<\/a><\/h1>)?=/i
text=Южный Парк / South Park / Сезон 15 / Серии 1-12 (14) (Мэтт Стоун, Трей Паркер) [2011 г., мультфильм, комедия, HDTV 720p] (NemFilm)
[2]
[3]
[4]
[5]


Столкнулся с проблемами:
1. Не знаю как вставить постфиксное слово в конструкцию S" " для вывода сообщения, поэтому пришлось сделать INI-GET-TEXT
2. не понял как с помощью регулярных выражений обходиться с переводом каретки в коде страницы, ни \r\n ни \x0D\x0A не ищут.
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

Re: Отслеживание изменений на сайте!

Postby makrus » Mon, 14 Nov 2011, 13:12

Moriturus
Столкнулся с проблемами:
1. Не знаю как вставить постфиксное слово в конструкцию S" " для вывода сообщения, поэтому пришлось сделать INI-GET-TEXT
2. не понял как с помощью регулярных выражений обходиться с переводом каретки в коде страницы, ни \r\n ни \x0D\x0A не ищут.

1. не понял что именно у тебя не получается, покажи как ты пробовал без INI-GET-TEXT и что не работает.
2. аналогично покажи как ты пробовал отловить переводы строк (кусок кода как ты получаешь строку из файла и каким регэкспом пытаешься отловить переводы строк, и для чего).
все познается в сравнении
makrus
 
Posts: 336
Joined: Mon, 12 Jul 2004, 14:46
Location: Волгоград

Re: Отслеживание изменений на сайте!

Postby Morituruz » Mon, 14 Nov 2011, 19:22

makrus wrote:1. не понял что именно у тебя не получается, покажи как ты пробовал без INI-GET-TEXT и что не работает.

Я просто не знаю как поступают в таких случаях, когда внутрь S" " надо вставить такое же постфиксное слово, принимающее строку:
Code: Select all
36 S" get_updates" DROP S" Было:%S" text" INI-GET-VALUE%" EVAL-SUBST DROP 0 MessageBoxA 6 =

makrus wrote:2. аналогично покажи как ты пробовал отловить переводы строк (кусок кода как ты получаешь строку из файла и каким регэкспом пытаешься отловить переводы строк, и для чего).

С этим вроде разобрался, зато другой вопрос возник: как быть, в операторе просмотра назад ?#N максимум 9 символов? Если надо больше, то что?
Например из такого кода:
Code: Select all
<h2 style="margin: 0px 360px 20px 0px">
cFosSpeed - Версия
<span id="cfosspeed_release_x86_version">7.00</span>
<strong class="red" style="padding: 0px 20px">Новый!</strong>

надо вытащить 7.00, а перед ним обязательно должно стоять cfosspeed_release_x86_version\x22>, иначе там другие совпадения будут.
Т.е. регэксп такой:
Code: Select all
/cfosspeed_release_x86_version\x22>.+(<\/span>)?=/i

Находит такой текст:
cfosspeed_release_x86_version">7.00
Но мне не очень хочется видеть cfosspeed_release_x86_version"> в выдаче, а хочется просто 7.00

И ещё, когда я ищу с переносами строки (оно в середине поисковой строки), то можно ли это дело (или шире: любой элемент регулярного выражения в середине найденной строки) исключить из $0? а то ведь в check.ini так с переносами и запишется. Я понимаю, что можно потом работать с $0 как со строкой и отрезать лишнее, но теряется универсальность.
User avatar
Morituruz
 
Posts: 727
Joined: Sun, 14 Oct 2007, 01:51

Re: Отслеживание изменений на сайте!

Postby makrus » Tue, 15 Nov 2011, 11:38

Moriturus
Я просто не знаю как поступают в таких случаях, когда внутрь S" " надо вставить такое же постфиксное слово, принимающее строку:
Если я правильно понял что ты хочешь, то ты проделываешь двойную работу, запихиваешь слово INI-GET-VALUE в строку которую потом разворачиваешь..., тебе надо что бы на стеке была au-строка, так? Так ведь INI-GET-VALUE такую строку и оставляет после себя, зачем все это засовывать в S" " ?
надо вытащить 7.00, а перед ним обязательно должно стоять cfosspeed_release_x86_version\x22>, иначе там другие совпадения будут.
Попробуй использовать вот такой регэксп:
Code: Select all
S" /<span id=\x22cfosspeed_release_x86_version\x22>(.+)</span>/"
нужные тебе "7.00" получишь в "$1"
И ещё, когда я ищу с переносами строки (оно в середине поисковой строки), то можно ли это дело (или шире: любой элемент регулярного выражения в середине найденной строки) исключить из $0?
Ты целиком страницу в память прочитываешь, а ты попробуй пройтись по файлу циклом построчного чтения, тогда в каждом проходе внутри цикла у тебя будет строка без символов перевода строки.
все познается в сравнении
makrus
 
Posts: 336
Joined: Mon, 12 Jul 2004, 14:46
Location: Волгоград

Previous

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Google [Bot] and 2 guests

cron