calling all the dogs
11:13 | 21-05-2006 | HOWTO, Internet, Software | 1 Comment
понятное дело, что быть в курсе проиходящего хочется очень, а следить за изменениям (любыми) обычно времени нет вообще. ровно так получается и с данными в интернете — как не пропустить обновление? как оперативно напписать ответ на сообщение в форуме? ведь должно же вместо утомляющего щелканья по ссылкам быть какое-то логичное решение?
оно и в самом деле есть — под Windows, помнится, я пользовался неким WebMon, для Dashboard есть какой-то widget, а для geeks at heart всегда можно придумать что-нибудь еще.
например, есть такая утилита cURL, которая возьмет и положит в stdout данные оттуда, откуда ей укажут. можно, то есть, просто сравнить несколько таких результатов, полученных в разное время. и тут же сигнализировать куда следует, если вдруг найдутся различия — говоря, кстати, про Mac OS X, замечу, что сигнализировать тут принято с помощью красивого Growl (и его дополнительной утилиты, работающей из командной строки, — growlnotify).
вот такой, то есть, результат на примере конференции MyPsion.ru:
#!/bin/sh cd /Users/s/usr/local/scripts/www-monitor/ #переход в рабочий каталог #(что можно проверить затем таким образом: pwd | /usr/local/bin/growlnotify) curl -s http://mypsion.ru/webboard/boardsearch.php?date=today > mypsion.new #получение "новой" копии контроллируемой страницы if [ -f mypsion.old ] #проверка существования "старой" копии then cat mypsion.new | grep 'FONT FACE=Arial,Helvetica SIZE=2' > msg.new cat mypsion.old | grep 'FONT FACE=Arial,Helvetica SIZE=2' > msg.old #"высечение" изменяемой части страницы diff msg.new msg.old > msg.diff #сравнение "новой" и "старой" изменяемых частей #с записью результата в перезаписываемый файл if [ -s msg.diff ] #проверка размера результата сравнения #(если файл получился нулевой длины, то и обновления не произошло) then /usr/local/bin/growlnotify -s --image mypsion.gif \\ -t 'Web Information Update' -m 'NEW MESSAGES @ MYPSION.RU' #сообщение об изменениях fi else cp mypsion.new mypsion.old #создание "старой" копии в случае если ее не было fi cp mypsion.new mypsion.old
который вполне логично было бы запускать с помощью crontab — но growlnotify, к сожалению, по непонятным причинам в связке с at или crontab работает неправильно.
поэтому лучше просто зациклить:
#!/bin/sh until ps -aux | grep [w]tch #любое невыполнимое условие [собственно, вышеозначенный скрипт] sleep 300 #пауза 5 минут до следущей проверки done
после чего запускать его через StartupItems, не забыв при этом о неком StartupParameters.plist и о прочих необходимых требованиях — вот так:
#!/bin/sh . /etc/rc.common sh /Users/s/usr/local/scripts/www-monitor/mypsion.sh &
человек наблюдательный, кстати, заметит, что “невыполнимое условие” наверняка предназначалось для чего-то еще — что ж, оно и верно:
:).