Мониторинг сотового баланса (Мониторинг средствами bash)

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

A_R_S
Сообщения: 13

Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 11:15

Здравствуйте, меня зовут Арсен.
Фрагмент кода который должен выдергивать баланс на Билайне:

Код:

#!/bin/sh -e # Input: LOGIN, PASSWORD Output: account balance UA="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36" COOKIE_FILE="/tmp/COOKIE_FILE" request_curl() { curl \ --user-agent "$UA" \ --cookie "$COOKIE_FILE" \ --cookie-jar "$COOKIE_FILE" \ -k \ -i \ --raw \ --location \ $@ } #request_curl -o /tmp/1.html https://my.beeline.ru/login.html request_curl -o /tmp/beeline.html \ --data "loginFormB2C%3AloginForm=loginFormB2C%3AloginForm&loginFormB2C%3AloginForm%3Alogin=ЛОГИН&loginFormB2C%3AloginForm%3Apassword=ПАРОЛЬ&loginFormB2C%3AloginForm%3ApasswordVisibl$ https://my.beeline.ru/login.html


Авторизация проходит успешно, но я не вижу баланса Посетить мою домашнюю страницу
Баланс не видно потому что он формируется аяксом, обнаружил такое на странице:

Код:

<form id="j_idt582:j_idt584" name="j_idt582:j_idt584" method="post" action="./Личный кабинет «Мой Билайн»_files/Личный кабинет «Мой Билайн».html" enctype="application/x-www-form-urlencoded" style="display: none"> <input type="hidden" name="j_idt582:j_idt584" value="j_idt582:j_idt584"> <script type="text/javascript">loadingBalance = function() {PrimeFaces.ab({source:'j_idt582:j_idt584:j_idt585',formId:'j_idt582:j_idt584',updateSelector:'@(.pre-balance-block, .payment-form)',async:true,onstart:function(cfg){loadingBalanceBlock.show();;},oncomplete:function(xhr,status,args){loadingBalanceBlock.hide(); try{ avaibleServices();}catch(e) {};},params:arguments[0]});};$(function() {loadingBalance();});</script><input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="747523851311306748:6362696473948308748" autocomplete="off"> </form>

Как мне выдернуть баланс?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Мониторинг сотового баланса

Сообщение Bizdelnick » 17.11.2014 12:05

Оно Вам надо? Они что-то поменяют на сайте, и скрипт работать перестанет. В итоге на его починку будет уходить больше времени, чем он будет работать.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 13:26

Bizdelnick писал(а):
17.11.2014 12:05
Оно Вам надо? Они что-то поменяют на сайте, и скрипт работать перестанет. В итоге на его починку будет уходить больше времени, чем он будет работать.

Что посоветуете тогда?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Мониторинг сотового баланса

Сообщение Bizdelnick » 17.11.2014 13:39

Я не могу ничего посоветовать, потому что не знаю Вашей цели.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 13:45

Bizdelnick писал(а):
17.11.2014 13:39
Я не могу ничего посоветовать, потому что не знаю Вашей цели.

Цель проста, надо мониторить баланс сотовых операторов МТС, МегаФон и Билайн своего региона.
Другого варианта как парсинг личного кабинета у меня нет. :angry:
К примеру есть 20 телефонных номеров.
Думаю попробовать реализовать через php.
На bach получилось сделать только у МТС, У Билайна баланс формируется аяксом, а у МегаФона необходимо достать откуда-то SESSION_ID.
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4665
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Мониторинг сотового баланса

Сообщение SLEDopit » 17.11.2014 15:05

A_R_S писал(а):
17.11.2014 13:26
Что посоветуете тогда?
Погуглить. Ну или погитхабить.

upd. хм, ваш код подозрительно похож на упомянутый выше проект. вот сравните:

Код: Выделить всё

#!/bin/sh -e
OLDPATH=$PATH; PATH=".:..:$(dirname $0):$PATH"; . _spmon_lib; PATH=$OLDPATH
# Input: LOGIN, PASSWORD
# Output: account balance
request_curl()
{
        local add_arg=
        [ -z "$DEBUG" ] && add_arg=--silent || add_arg=--verbose
        curl \
                --user-agent "$UA" \
                --cookie "$COOKIE_FILE" \
                --cookie-jar "$COOKIE_FILE" \
                --location \
                $add_arg $@
}
request_curl -o $TM/1.html https://uslugi.beeline.ru/
request_curl -o $TM/2.html \
        --data "_stateParam=eCareLocale.currentLocale%3Dru_RU__Russian&_forwardName=null&_resetBreadCrumbs=false&_expandStatus=&userName=$LOGIN&password=$PASSWORD& ecareAction=login" \
        https://uslugi.beeline.ru/loginPage.do
request_curl -o $TM/3.html \
        --referer https://uslugi.beeline.ru/VIPLoadPrepaidCtnArchiveOfRequestsAction.do \
        https://uslugi.beeline.ru/vip/prepaid/refreshedPrepaidBalance.jsp
# <td class="tabred">
# 123,45 руб. <small class="gray">на 12:34</small>
# </td>
iconv -f windows-1251 -t utf-8 $TM/3.html | sed -ne '/руб./ { s/ .*$//; s/^\s*//; s/,/./; p }'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 15:27

SLEDopit писал(а):
17.11.2014 15:05
A_R_S писал(а):
17.11.2014 13:26
Что посоветуете тогда?
Погуглить. Ну или погитхабить.

upd. хм, ваш код подозрительно похож на упомянутый выше проект. вот сравните:

Код: Выделить всё

#!/bin/sh -e
OLDPATH=$PATH; PATH=".:..:$(dirname $0):$PATH"; . _spmon_lib; PATH=$OLDPATH
# Input: LOGIN, PASSWORD
# Output: account balance
request_curl()
{
        local add_arg=
        [ -z "$DEBUG" ] && add_arg=--silent || add_arg=--verbose
        curl \
                --user-agent "$UA" \
                --cookie "$COOKIE_FILE" \
                --cookie-jar "$COOKIE_FILE" \
                --location \
                $add_arg $@
}
request_curl -o $TM/1.html https://uslugi.beeline.ru/
request_curl -o $TM/2.html \
        --data "_stateParam=eCareLocale.currentLocale%3Dru_RU__Russian&_forwardName=null&_resetBreadCrumbs=false&_expandStatus=&userName=$LOGIN&password=$PASSWORD& ecareAction=login" \
        https://uslugi.beeline.ru/loginPage.do
request_curl -o $TM/3.html \
        --referer https://uslugi.beeline.ru/VIPLoadPrepaidCtnArchiveOfRequestsAction.do \
        https://uslugi.beeline.ru/vip/prepaid/refreshedPrepaidBalance.jsp
# <td class="tabred">
# 123,45 руб. <small class="gray">на 12:34</small>
# </td>
iconv -f windows-1251 -t utf-8 $TM/3.html | sed -ne '/руб./ { s/ .*$//; s/^\s*//; s/,/./; p }'


Этот пример тоже пробовал, но старые ссылки на кабинет.
Сайт изменили, теперь надо писать под новый.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Мониторинг сотового баланса

Сообщение Bizdelnick » 17.11.2014 15:33

A_R_S писал(а):
17.11.2014 13:45
Цель проста, надо мониторить баланс сотовых операторов МТС, МегаФон и Билайн своего региона.

Мониторить ради того, чтобы мониторить? Почему не устраивают UUCP-запросы?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4665
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Мониторинг сотового баланса

Сообщение SLEDopit » 17.11.2014 15:44

A_R_S писал(а):
17.11.2014 15:27
Сайт изменили, теперь надо писать под новый.
Так пишите под мобильный вариант. Там меньше всякой фигни и парсить легче. И наверняка всяких аяксов нет.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 16:09

SLEDopit писал(а):
17.11.2014 15:44
A_R_S писал(а):
17.11.2014 15:27
Сайт изменили, теперь надо писать под новый.
Так пишите под мобильный вариант. Там меньше всякой фигни и парсить легче. И наверняка всяких аяксов нет.

У МТС есть легкий вариант сайта, на нем прокатило сразу.
Вот у МегаФона и Билайна я таких легких вариантов не нашел(по крайней мере в своем регионе - Дагестан ) :angry:
Вы знаете такие?

Bizdelnick писал(а):
17.11.2014 15:33
A_R_S писал(а):
17.11.2014 13:45
Цель проста, надо мониторить баланс сотовых операторов МТС, МегаФон и Билайн своего региона.

Мониторить ради того, чтобы мониторить? Почему не устраивают UUCP-запросы?

Как применить то их к моей теме.?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Мониторинг сотового баланса

Сообщение Bizdelnick » 17.11.2014 16:13

A_R_S писал(а):
17.11.2014 16:09
Как применить то их к моей теме.?

Не знаю. Потому что Вы по-прежнему не объяснили свою цель (не задачу, а именно конечную цель).
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4665
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Мониторинг сотового баланса

Сообщение SLEDopit » 17.11.2014 16:16

A_R_S писал(а):
17.11.2014 16:09
Вы знаете такие?
http://m.beeline.ru/mkl/index.wbp

UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

Kopilov
Сообщения: 655
ОС: Gentoo, Debian

Re: Мониторинг сотового баланса

Сообщение Kopilov » 17.11.2014 16:19

Bizdelnick писал(а):
17.11.2014 16:13
Вы по-прежнему не объяснили свою цель

Если
A_R_S писал(а):
17.11.2014 13:45
К примеру есть 20 телефонных номеров.
-- наверно, что-нибудь типа кабинета, в котором шеф может единовременно видеть баланс телефонов своих подшефных, не имея физического доступа к телефонам. (И, соответственно, SIM-картам -- а UUCP-запросы тогда невозможны, верно?)
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 16:29

Bizdelnick писал(а):
17.11.2014 16:13
A_R_S писал(а):
17.11.2014 16:09
Как применить то их к моей теме.?

Не знаю. Потому что Вы по-прежнему не объяснили свою цель (не задачу, а именно конечную цель).

Эх :rolleyes:
Есть файл со списком номеров состоящего из двух колонок разделенных ";". В первой номер, а во второй пароль от личного кабинета(НОМЕР;ПАРОЛЬ).
Cкрипт (в данном случае мой на bash) должен выдергивать номер и пароль и заходить в личные кабинеты операторов вытаскивая инфу
НОМЕР - БАЛАНС в отдельный файл HTML(HTML будет лежать на сервере для всех желающих видеть баланс на номерах)
Сейчас хоть понятно объяснил :rolleyes: ?
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 16:35

Kopilov писал(а):
17.11.2014 16:19
Bizdelnick писал(а):
17.11.2014 16:13
Вы по-прежнему не объяснили свою цель

Если
A_R_S писал(а):
17.11.2014 13:45
К примеру есть 20 телефонных номеров.
-- наверно, что-нибудь типа кабинета, в котором шеф может единовременно видеть баланс телефонов своих подшефных, не имея физического доступа к телефонам. (И, соответственно, SIM-картам -- а UUCP-запросы тогда невозможны, верно?)

Как UUCP применять для получения баланса и что для этого надобно?
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 16:43

SLEDopit писал(а):
17.11.2014 16:16
A_R_S писал(а):
17.11.2014 16:09
Вы знаете такие?
http://m.beeline.ru/mkl/index.wbp

Это да, действительно мобильная версия , но переходя в личный кабинет вижу не мобильную версию а https://my.beeline.ru/login.html то с чем я и работаю в данный момент :unsure:
Вот версия МТС (спасибо им за то что не усложняют) легкая версия. Таких нет у Билайна и МегаФона.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Мониторинг сотового баланса

Сообщение Bizdelnick » 17.11.2014 17:02

A_R_S писал(а):
17.11.2014 16:29
Есть файл со списком номеров состоящего из двух колонок разделенных ";". В первой номер, а во второй пароль от личного кабинета(НОМЕР;ПАРОЛЬ).
Cкрипт (в данном случае мой на bash) должен выдергивать номер и пароль и заходить в личные кабинеты операторов вытаскивая инфу
НОМЕР - БАЛАНС в отдельный файл HTML(HTML будет лежать на сервере для всех желающих видеть баланс на номерах)
Сейчас хоть понятно объяснил?

Это и раньше было понятно. Непонятно - зачем нужен этот файл с балансами? В таком виде задача решается только с помощью парсера, но это тупиковый путь, как я уже писал выше. Зная цель, можно переформулировать задачу.

A_R_S писал(а):
17.11.2014 16:35
Как UUCP применять для получения баланса и что для этого надобно?

У Билайна - отправить запрос *102#.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 17:18

Bizdelnick писал(а):
17.11.2014 17:02
Это и раньше было понятно. Непонятно - зачем нужен этот файл с балансами?

НУ а где-то надо видеть,отображать инфу НОМЕР - БАЛАНС
Спасибо сказали:

Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4332
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: Мониторинг сотового баланса

Сообщение Goodvin » 17.11.2014 17:19

A_R_S писал(а):
17.11.2014 16:29
Bizdelnick писал(а):
17.11.2014 16:13
A_R_S писал(а):
17.11.2014 16:09
Как применить то их к моей теме.?

Не знаю. Потому что Вы по-прежнему не объяснили свою цель (не задачу, а именно конечную цель).

Эх :rolleyes:
Есть файл со списком номеров состоящего из двух колонок разделенных ";". В первой номер, а во второй пароль от личного кабинета(НОМЕР;ПАРОЛЬ).
Cкрипт (в данном случае мой на bash) должен выдергивать номер и пароль и заходить в личные кабинеты операторов вытаскивая инфу
НОМЕР - БАЛАНС в отдельный файл HTML(HTML будет лежать на сервере для всех желающих видеть баланс на номерах)
Сейчас хоть понятно объяснил :rolleyes: ?

Есть ощущение, что за задачу надо взяться с другой стороны.
Вам бы надо посмотреть в сторону корпоративного соглашения с Билайном.
Не исключено, что оператор выдаст Вам или интерфейс для корпоративных клиентов, или будет делать работы за Вас, высылая по запросу готовые отчёты.
А Вы их уже там обрабатывайте и показывайте, как удобно.
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 17:25

Bizdelnick я готов принять ваш мудрый совет! :-)

Goodvin писал(а):
17.11.2014 17:19
Есть ощущение, что за задачу надо взяться с другой стороны.
Вам бы надо посмотреть в сторону корпоративного согласшения с Билайном.
Не исключено, что оператор выдаст Вам или интерфейс для корпоративных клиентов, или будет делать работы за Вас, высылая по запросу готовые отчёты.
А Вы их уже там обюрабатывайте и показывайте, как удобно.

Хм, неплохая идея!

Друзья, вы надеюсь задачу поняли.
Прошу дать совет как реализовать это, какими методами путями.
То как решил сделать я (на bash) не получается (только на билайне и мегафоне).
Сразу хочу сказать что UUCP к сожалению не прокатит (к большому сожалению)
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15764
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Мониторинг сотового баланса

Сообщение Bizdelnick » 17.11.2014 17:51

A_R_S писал(а):
17.11.2014 17:25
Друзья, вы надеюсь задачу поняли.

Не до конца. В частности, непонятно, нужно ли получать текущий баланс по запросу/ежедневно, или просто нужна статистика за какой-то период? Если второе, то можно для каждого номера настроить отправку детализации счёта на один и тот же ящик, а потом парсить уже письма, что будет существенно проще.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
DjSpike
Сообщения: 2265
Статус: в поисках истины
ОС: Lubuntu 12.04

Re: Мониторинг сотового баланса

Сообщение DjSpike » 17.11.2014 21:21

У меня на смартфоне стоит такая программа https://code.google.com/p/any-balance-providers/ она показывает баланс 5 симок, 4 банковских карт, 2 топливных карт....
А для дескотопа можно использовать conky чтобы баланс отображать на рабочем столе.
AvReg - По для организации Видеонаблюдения на Linux.
ДЭНСИ:КАССА - Рабочее место кассира под Linux.
Терминальные решения под Linux
Консультации по установке 1с+PostgreSQL+Ubuntu.
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 22:21

Bizdelnick писал(а):
17.11.2014 17:51
A_R_S писал(а):
17.11.2014 17:25
Друзья, вы надеюсь задачу поняли.

Не до конца. В частности, непонятно, нужно ли получать текущий баланс по запросу/ежедневно, или просто нужна статистика за какой-то период? Если второе, то можно для каждого номера настроить отправку детализации счёта на один и тот же ящик, а потом парсить уже письма, что будет существенно проще.

Здорово с ящиком, возьму на заметку!
А как настроить отправку детализации счета на почту?
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 17.11.2014 22:47

DjSpike писал(а):
17.11.2014 21:21
У меня на смартфоне стоит такая программа https://code.google.com/p/any-balance-providers/ она показывает баланс 5 симок, 4 банковских карт, 2 топливных карт....
А для дескотопа можно использовать conky чтобы баланс отображать на рабочем столе.

Интересный вариант. Как его применить в conky, используя API?
Спасибо сказали:

A_R_S
Сообщения: 13

Re: Мониторинг сотового баланса

Сообщение A_R_S » 27.11.2014 22:39

Для Билайна пробовал, но там все сложнее оказалось. Баланс формируется аяксом.

Код: Выделить всё

    _WARN=`echo $_RESPONSE | grep "messages-error"`
    if [ "$_WARN" == "" ];
    then
        _BALANCE=`echo $_RESPONSE | egrep -o "<span class=\"price[^\"]?\">[^<]+<span[^>]+>" | sed -e 's@<[^>]*>@@g' -e 's@\s*@ @' -e 's@\ @ @g' -e 's@^\s*@@'`

        if [ "$_BALANCE" != "" ];
        then
            echo "$_BALANCE" | sed -e 's@\..*@.@' -e 's@,@.@'
        else
            echo "Error: balance not avaible"
        fi
    else
        echo "Error: incorrect login or password"
    fi

Выдает "Error: balance not avaible", потому что баланс пуст.
К примеру fiddler выдал мне такой запрос

Код: Выделить всё

javax.faces.partial.ajax=true&javax.faces.source=j_idt582%3Aj_idt584%3Aj_idt585&javax.faces.partial.execute=%40all...

Также fiddler позволяет выгружать сессии в bat файл.
Выгрузил и пробовал выполнить то что выгрузилось, но увы.
Как "побороть" ajax?
Спасибо сказали: