14 июн. 2011 г.

Скрипт для проверки баланса.


Простенький быдло-скрипт для получения текущего баланса по счету ADSL-интернета ВолгиТелеком:
#!/bin/bash
##
## UTF-8:
## Скрипт для Zabbix, осуществляющий мониторинг состояния лицевого счета
## абонента ОАО Кировский филиал "Ростелеком-Волга" (ADSL).
## Параметр balans выводит текущее состояние счета в виде "0.00" с учетом
## возможности отрицательного баланса. В случае неудачной попытки получения
## баланса выводится значение -1.
## Параметр status используется для получения более полной инфомации. В случае
## ошибки со стороны биллинг-системы выдается номер и описание ошибки. Если ошибок
## нет, выдается текущий баланс.
##

#Учетные данные для проверки
LOGIN=
PASSWD=

#Проверка наличия логина и пароля
if [ -z $LOGIN ] || [ -z $PASSWD ]; then
echo "Enter LOGIN/PASSWD into script"
exit 1
fi

#Работаем во временной директории
cd /tmp

#Запрашиваем страницу аутентификации, вводим учетные данные, получаем параметры для доступа к личному кабинету.
wget --no-check-certificate -q -O 1.html "https://j-cabinet.kirov.ru:4459/pls/base/www.GetHomePage?p_logname=${LOGIN}&p_pwd=${PASSWD}"

#Полное имя пользователя
p_logname=`cat 1.html | egrep -o 'p_logname=([A-Z0-9]+)' | uniq | sed -e s/p_logname\=//`

#Некий хэш пароля
chksum=`cat 1.html | egrep -o 'chksum=([0-9]+)' | uniq | sed -e s/chksum\=//`

# Получаем страницу личного кабинета, извлекаем из нее текущее состояние счета или ошибку.
wget --no-check-certificate -q -O 2.html "https://j-cabinet.kirov.ru:4459/pls/base/www.PageViewer?page_name=KIROV*ADM_CON_INFO&logname=${p_logname}&n3=p_username&v3=$p_username$&n4=p_adm&v4=$p_adm$&chksum=${chksum}" | grep -A 1 dat_sel | egrep -o '[0-9.-]+'

#Баланс
BALANS=`cat 2.html | grep -A 1 dat_sel | egrep -o '[0-9.-]+'`

#Номер ошибки
ERR=`cat 2.html | egrep -o 'W+\-[0-9]+'`

#Описание ошибки
ERRNAME=`iconv -f CP1251 -t UTF-8 2.html | grep WWW | egrep -o '([а-Я]+\s?)+'`

#Удаляем временные файлы.
rm -f {1,2}.html

#Выводим требуемые данные.
case $2 in
        balans)
            if [ -z $BALANS ]; then
                echo -1
            else
                echo "$BALANS"
            fi
        ;;
status)
            if [ -z $ERR ]; then
                echo "Balans now is $BALANS"
            else
                echo "Remote server error: $ERR - $ERRNAME"
            fi
        ;;

        *)
            echo "Usage: vt_check_balans.sh $1 {status|balans}"
esac
Код отформатирован и вставлен с помощью centricle.com. Как выяснилось, сервис Postable теряет некоторые символы (в частности, "+"), что в регулярных выражениях критично. Пробовал хайлатеры кода, не понравилось. Также Blogger умеет сам игнорить парсинг вставленных спецсимволов в html-страничке - достаточно заключить блок текста в теги <pre></pre> - только шрифт при этом изменяется как по форме, так и по кеглю, а разбираться с этим лень. Но так, на будущее, чтобы знать.

UPD:
Для проверки баланса Мегафона можно интегрировать в скрипт следующую строку запроса (предварительно подключив услугу "Сервис-Гид" и разрешив авторизацию внешних программ):
curl -s -k "https://sg.megafonural.ru/ROBOTS/SC_TRAY_INFO?X_Username=${LOGIN}&X_Password=${PASSWD}" | egrep -o '([0-9.-]+)' | sed -e s/\<\BALANCE\>\//
В случае МТС (Бывший "Мультинекс", бывший "ВятКТВ") используется такой запрос:
wget --no-check-certificate -q -O multi.html "https://lk.kirovnet.net/api?key=${KEY}&contract=${CON}"
 где ${KEY} генерируется в личном кабинете, а ${CON} - номер контракта.