пятница, 4 декабря 2009 г.

Russian Post Tracking script

Заебавшись лазить на трекинг Почты России затем искать номер посылки и копипастить его куда следует я решил автоматизировать это дело.
Для автоматизации понадобиться любой *nix box(у меня это FreeBSD 8.0) плюс Apache любой версии и ниже описанный скрипт (chl_url.sh) который нужно добавить в cron:


UP! сценарий не раз обновлялся, для того что бы познакомиться с последними новинками лучше ткнуть в метку USPS


#!/bin/sh

wrk_dir=/root/rc/chk_url
out_fil=$wrk_dir/out_post.txt

index_t=$wrk_dir/index.temp
index_h=$wrk_dir/index.html

tmp_fil=$wrk_dir/tmp.txt

post1=RE0***227**US
post2=RB0**0*8***HK
post3=RF**83**48*GB

last_up=`date +"%Y-%m-%d @ %H:%M"`

html_head="<хтмл><хеад><тайтл>monitor $post1 | $post2 last updated: $last_up< / тайтл > < / хеад >"
html_end="< / боди >< / хтмл>"
html_hr="<хээр>"
html_br=" шесть тэгов <бээр>"


#/bin/rm -f $wrk_dir/index* $tmp_fil

echo $html_head > $index_h

/usr/local/bin/wget -N "http://info.russianpost.ru/css/data_face.css"

#######################################RUSSIAN#POST##########

/usr/local/bin/wget "http://info.russianpost.ru/servlet/post_item?action=search&searchType=barCode&show_form=yes&barCode=$post1&page=1" -O $index_t

/usr/bin/grep -i "table\|td\|tr\|STYLESHEET" $index_t | /usr/bin/grep -i -v "Dmitry\|Transitional" > $tmp_fil

/bin/cat $tmp_fil | sed -e 's/\.\.\/css\///g' >> $index_h

############################next##########USPS################
echo $html_hr >> $index_h

/usr/local/bin/wget "http://trkcnfrm1.smi.usps.com/PTSInternetWeb/InterLabelInquiry.do?strOrigTrackNum=$post1" -O $index_t

/usr/bin/grep -i "table\|tr\|td" $index_t | /usr/bin/grep -i -v "Transitional\|title>\|footNavImg\|x\.substring\|getTrackNum\|alert\|true\|format the header\|spacer\.gif\|uspsLogo\.jpg\|\.jsp\|navigation\|\.gif\|nofearact\|JavaScript\|WebTrends" >> $index_h


#############################next##########HONGKONG##POST######
echo $html_hr >> $index_h

/usr/local/bin/wget "http://app3.hongkongpost.com/CGI/mt/genresult.jsp?tracknbr=$post2&submit=Enter" -O $index_t

/usr/bin/grep -i -v "\/div\|charset=\|Bangkok\|Speedpost\|Select\|return false\|Footer\|else\|form\|form1\.country\.value\|country\|option value=\|Mail Tracking\|www\.hongkongpost\.com\|Transitional\|title\|footNavImg\|x\.substring\|getTrackNum\|alert\|true\|format the header\|spacer\.gif\|uspsLogo\.jpg\|\.jsp\|navigation\|\.gif\|nofearact\|JavaScript\|script\|FunOnSubmit\|WebTrends\|Enter\|www\.w3\.org\|}\|{" $index_t >> $index_h



#########################next##########ROYAL#MAIL##UKPOST######
echo $html_hr >> $index_h

/usr/local/bin/wget "http://www.royalmail.com/portal/rm/track?trackNumber=$post3" -O $index_t

/usr/bin/grep -i -v "DOCTYPE\|xmlns\|head\|meta\|title\|script\|link\|body\|div\|href\|img\|_validateSearch\|table\|col\|тд\|тр\|searchInput\|sitesearch\|notDisplayed\|rm_search.jspf\|\|var\|ecos\|engurl\|firstItem\|siteCatalyst\|" $index_t >> $index_h

########end#######

echo $html_end >> $index_h



думаю пару моментов нужно пояснить
1.
wrk_dir=/root/rc/chk_url
рабочая директория скрипта.
2.
post*
это номера трекинга которые предоставляет перевозчик для посылок. Номер ессно без маски (*)
3.
всевозможные grep и sed
это фильтры удаляющие всякий мусор из страницы.
4.
wget "http://info.russianpost.ru/....
это запрос к трекингу Почты России
5.
wget "http://trkcnfrm1.smi.usps.com/PTSI...
это запрос к USPS здесь он представлен для примера, так как если у вас Н посылок с международным идентификаторам, вполне будет достаточно запроса из пред идущего пункта, повторив его столько раз сколько вам необходимо (сколько у вас посылок) используя соответствующий почтовый идентификатор.
6.
index_h=$wrk_dir/index.html
index_h содержит полный путь результирующего файла. Желательно, но не обязательно, что бы он(путь) совпадал с DocumentRoot сервера Apache. В моём случае DocumentRoot в httpd.conf указан как /var/www/html а результат работы скрипта я хочу получать в покаталоге /post/ для чего у меня стоит симлинк $index_h в DocumentRoot /post/. И для того что бы мне открыть страницу с результатом мне нужно зайти на http://адр.сервера/post/. Если же DocumentRoot настроить как /var/www/html/post то заходить нужно будет на URL http://адр.сервера/
7.
Всю порнографию вида хтмл,хеад,тайтл,боди,тег хээр,шесть тегов бээр ; нужно переписать в английский эквивалент(те html,head итд)

8.
/usr/local/bin/wget -N "http://info.russianpost.ru/css/data_face.css" так вытягивается табличка стилей для Российского трекинга (без неё таблица не таблица вовсе), затем ложиться в папку со скриптом и симлинком (ln -s) подкладывается в Apache DocumentRoot /post/. Понятное дело симлинк у меня используется потому как я любитель решений через гланды, а в более менее продакшн системах через опцию O (-O имя_файла) нужно переназначить вывод таблицы стилей туда где ей положено лежать,в моём случае это положено где то в Apache DocumentRoot /post/

9.
Для того что бы скрипт chl_url.sh выполнялся регулярно, следующую строку я добавил в /etc/crontab
30 * * * * root /root/rc/chk_url/chl_url.sh
так как у меня этот *nix box - люто изолированная тестовая среда я могу себе позволить выполнять всякую шнягу от рута, ВСЕМ ОСТАЛЬНЫМ я так делать не советую. Советую добавить соответствующую строку в crontab любого другого пользователя и дать соответствующие права на сам скрипт chl_url.sh ну и ессно положить скрипт поближе к юзеру (те в его директорию)

10.
по поводу выделенных тд и тр читать здесь

Комментариев нет: