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 &
  

One Response to “calling all the dogs”

  1. s says:

    человек наблюдательный, кстати, заметит, что “невыполнимое условие” наверняка предназначалось для чего-то еще — что ж, оно и верно:

    until ps -aux | grep [w]atch
    do
        sleep 10
    done
    echo
    echo "*************************"
    echo "* WATCH IS RUNNING! ***"
    echo "***********************"
    echo
    

    :).

Leave a Reply