Изначально была написана как надстройка для MobileBalance, но постепенно перерастает в самостоятельное приложение.
Умеет получать балансы МТС, Билайн, Мегафон, Теле2, Yota(modem), Ростелеком, ОнЛайм, Zadarma, Cardtel, SipNet, Карта стрелка, Автодор транспондер, Московский паркинг, Мосэнергосбыт, курсы валют и акций, список операторов пополняется.
Умеет отправлять полученные балансы в телеграм.
Может работать как самостоятельная программа без MobileBalance (самостоятельная работа пока в начальной стадии разработки).
Инструкцию по настройке в режиме самостоятельной прораммы смотрите в standalone\readme.md (github)
Данный файл написан в формате Markdown и для более удобного просмотра можете открыть его на github
- шлюз дает возможность писать собственные скрипты на любом языке и уходит от ограничений IE для javascript.
- Т.к. mobilebalance меньше дергает IE он меньше подвисает и падает.
- Для ряда операторов используется движок браузера chrome или родственных ему на cromium, для получения информации о балансе, но взаимодействие с ним вынесено за пределы процесса Mobilebalance? так что не приводит к накоплению ошибок и утечкам памяти.
- Можно сохранять сессии, т.е. на каждый телефон tele2 у вас будет своя сессия с сохраненными куками.
- Все собрано таким образом чтобы не оказывать никакого влияния на установленные программы, в т.ч. если установлен python другой версии.
- Есть два варианта использования вызов через DLL - dllplugin плагин и вызов через локальный вебсервер jsmblhplugin.
- jsmbLh и DLL плагины это всего-лишь обертка, которая кнутри вызывает одни и те же плагины
- Т.к. у версии dllplugin обнаружился недостаток в виде того что MobileBalance принимает из dllplugin ограниченное количество параметров, то в настоящий момент приоритетной является версия с вебсервером - jsmblhplugin, хотя если вам нужен только баланс и какие-то базовые вещи, то никто не мешает использовать и dllplugin.
Записал несколько видео о том как настраивать, кому-то по видео возможно будет проще
- Свежую версию сборки можно найти в releases в моем репозитории на github или в форуме на 4pda посвященном MobileBalance.
- !!! Внимание, для плагинов работающих через Chrome (на текущий момент это mts2 ростелеком и a1by) на компе должен быть установлен Chrome, или другой браузер на chromium.
- Распаковать свежую версию сборки в папку где установлен MobileBalance (точнее где находятся файлы Options.ini, phones.ini, BalanceHistory.mdb если в папке MobileBalance.exe есть а указанных файлов нет, то пробуйте поискать в папке например вместо C:\Program Files (x86)\Mobilebalance посмотрите в папке %localappdata%\VirtualStore\Program Files (x86)\Mobilebalance или просто поищите по диску в какой папке у вас находится phones.ini и другие файлы). В принципе можно распаковать в любую папку, в которую у скрипта при работе будет доступ на запись, базовый функционал будет работать, все остальное можно донастроить потом.
- Запустить из папки mbplugin setup_and_check.bat (он пересоберет плагины, поставит в автозагрузку веб сервер и проверит работу тестовым плагином). Бывает, что он в процессе выдает ошибки, но при этом отрабатывает нормально. Так что если были сообщения об ошибке, то можно их проигнорировать и попробовать работу программы, или при желании можно запустить setup_and_check.bat повторно и посмотреть на результат.
- Подключить нужные плагины из папки mbplugin\jsmblhplugin
- Можно пользоваться.
Веб сервер нужен для jsmbLH плагинов (запускается mbplugin\run_webserver.bat), а кроме этого если включить режим записи в БД, то через web сервер становиться доступен просмотр отчетов по телефонам, полученным через mbplugin report, это ссылку также можно открыть через иконку web сервера в системном трее
Отчет также можно открыть как html файл, по умолчанию он находится в папке mbplugin\DB\balance.html, при желании это можно поменть через параметр balance_html в mbplugin.ini
(Источником информации послужили как собственное изучение так и существующие плагины, так что пользуясь случаем хочу выразить благодарность всем авторам
leha3d Pasha comprech y-greek и другим, кто тратил свои силы и время на реверс сайтов операторов и разработку)
test1 - Простой тест с демонстрацией всех полей
test2 - Пример реализации ввода капчи
test3 - Пример реализации через движок хрома (puppeteer)
mts2 - МТС (сотовая связь) через puppeteer с открытием браузера
beeline - Билайн (сотовая связь)
megafon - Мегафон (сотовая связь)
megafonb2b - Мегафон b2b (сотовая связь)
tele2 - ТЕЛЕ2 (сотовая связь)
yota - Yota (сотовая связь)
a1by - A1(velcom) Беларусь (сотовая связь)
rostelecom - Ростелеком (телефония и интернет)
smile-net - Infoline/smile-net/Virgin connect (Интернет провайдер)
onlime - onlime.ru (Интернет провайдер)
lovit - lovit.ru (Интернет провайдер)
zadarma - Zadarma.com (IP телефония)
cardtel - Cardtel (IP телефония)
sipnet - Sipnet (IP телефония)
strelka - Баланс карты стрелка
sodexo - Получение баланса карты Sodexo (подарочные карты)
currency - Курсы валют USD, EUR, с ЦБ и с MOEX, курсы акций с MOEX и yahoo finance (заменил плагины eur, usd, moex и yahoo)
stock - Рассчет цены портфеля ценных бумаг
avtodor-tr - Автодор транспондер
parking_mos - parking.mos.ru оплата парковки (Вход через логин/пароль на login.mos.ru)
mosenergosbyt - Сайт мосэнергосбыт (ЖКХ)
vscale - Облачные серверы для разработчиков
Для плагинов rostelecom и mosenergosbyt можно указывать конкретный лицевой счет если их несколько в формате login/лицевой_счет
Телеграм бот
Запись в базу sqlite
Импорт данных из mdb базы mobilebalanse в БД sqlite
Просмотр балансов в браузере (как в MobileBalance) и генерация отчета в виде html странички
В перспективе есть планы, чтобы mbplugin работал как самостоятельное приложение
! В файле settings.py можно посмотреть описание всех параметров используемых в mbplugin.ini.
Если архив был распакован в одну из папок в папке MobileBalance то при первом запуске (setup_and_check.bat) в папке, где находится mobilebalance.exe будет создан mbplugin.ini с дефолтовыми минимальными настройками (по умолдчанию все доп фишки выключены).
Если архив распакован не в папку с mobilebalance, то прижелании получить дополнительный функционал необходимо в секции [MobileBalance] path прописать путь в папку с mobilebalance
Что можно включить (все параметры, значения по умолчанию, и коментарии к ним можно также посмотреть в settings.py, но менять через ini):
- logginglevel - журнал работы mbplugin, по умолчанию включен режим INFO, журнал ведется в папке mbplugin\log, dllplugin пишет в mbplugin.log, jsmbLh плагин пишет в http.log в режиме DEBUG в папку log сохраняются все страницы загруженные в процессе получения баланса (для mts2, ростелеком и других плагинах которые на движке хрома не сохраняются)
- loggingfilename = путь к файлу лога, относительно папки plugin, для dllplugin
- logginghttpfilename = путь к файлу лога, относительно папки plugin, для web север
- mts_usedbyme = 0 - спецвариант по просьбе Mr. Silver в котором возвращаются не остаток интернета, а использованный, 0 - показывать оставшийся трафик (NonUsed) по всем, 1 - показывать использованный трафик (usedByMe) по всем, или список тел, через запятую - показать использованный только для этих списка телефонов
- sqlitestore = 1 - запись запросов в sqlite БД, ghbxtv пишуться все поля, напримет те же SMS, которые не принимает MobileBalance через DLL, sqlite БД по умолчанию находится в папк mobilebalance, но при желании это путь можно изменить в параметре dbfilename
- createhtmlreport = 1 (требуется включенный sqlitestore = 1)- после каждого вызова mbplugin создавать файл с отчетом, сходный с html страничкой, которую mobilebalance умеет отдавать в виде html. Список полей в отчете можно поменять в переменной table_format, только не трогайте на первых двух местах PhoneNumber,Operator, иначе сломается. Пока не придумал как по другому.
Местоположение отчета по умолчанию - в папке mbplugin\db\balance.html, если хотите в другое место - меняйте параметр balance_html Если выставить sqlitestore = 1 и createhtmlreport = 1, то после каждого получения баланса будет генерироваться файл db\balance.html максимально близкий по виду к файлу который генерирует MobileBalance, но только по по тем телефонам, баланс которых мы получаем через mbplugin. Также все данные получаемые через mbplugin сохраняются в базу SQLITE схожей структуры с BalanceHistory.mdb. Данная возможность позволяет видеть те поля, которые не принимает MobileBalance из DLL плагинов, наприимер количество SMS.
- updatefrommdb = 1 - Экспериментальная фишка. Импорт данных из BalanceHistory.mdb после каждого запроса, требует установленного ODBC драйвера и включенного sqlitestore = 1, для интеграции с базой MDB необходимо установить 32битный ODBC драйвер для MDB AccessDatabaseEngine.exe Скачать можно отсюда. Для первоначального полного импорта используйте plugin\copy_alldata_from_mdb.bat Замечание для пользователей автономной версии, импортировать данные можно и в ней (положив mdb файл в ту же папку где лежит sqlite файл), но для этого нужно на время импорта добавить параметр updatefrommdb = 1 а после импорта или выключить или убрать.
- path - путь к папке, где находится MobileBalance
- show_tray_icon - показывать иконку в трее - 1 прятать - 1, (по умолчанию 1)
- show_chrome - Прятать окна Chrome (при logginglevel=DEBUG всегда показывает)
- show_captcha - При определении что в браузере сработала капча скрытое окно хрома будет показано
- [Telegram] секция с настройками для телеграм бота (подробное описание в секции про телеграм)
- [HttpServer] - Секция с настройками web сервер порт сервера, доступ к серверу по сети, и список полей в отчете
- Для использования этих возможностей убедитесь, что в файле mbplugin.ini в разделе [MobileBalance] параметр path указывает на папку где находится mobilebalance.exe. Если вы распаковали архив в подпапку в папке с MobileBalance то path должен настроиться автоматически.
В этом варианте данные бот берет из встроенного в MobileBalance web сервера, соответственно берет все балансы что есть в MobileBalance без дополнительных усилий.
- Для работы этого варианта необходимо включить WWW сервер в настройках Mobilebalance - идем Настройки программы \ WWW ставим галку Запустить встроенный WEB сервер, задаем пароль
123456, если вы хотите прописать другой пароль, то в секции[Telegram]необходимо добавить параметрmobilebalance_http = http://localhost:19778/ваш пароль/Обязательно проверьте в браузере что такой адрес открывается.
!!! после пароля символ/обязателен - Включаем показ колонки Delta (запрос), для этого идем в настройки MobileBalance Информационное окно и ставим черную (обязательно черную, а не серую) галочку напротив
Изменение баланса относительно предыдущего запроса (Расчетный) - Получить API-TOKEN - в телеграме идем в бота @BotFather даем команду
/newbotзадаем имя для бота, оно обязательно должно заканчиваться на ...bot и должно быть не занято, получаем сообщение с токеном бота вида 123456:AAFgshadfgjasdgfghadEklmn - В mbplugin.ini создаем секцию
[Telegram]
[Telegram]
tg_from = mobilebalance
api_token = <TELEGRAM API-TOKEN> (из шага 3)
auth_id = ваши id через зяпятую (в начале просто оставьте пустым если пока не знаете) (см шаг 5)
mobilebalance_http = http://localhost:19778/ваш пароль/ (из шага 1, если вы задали пароль 123456 то эту строчку можно удалить)- Обязательно перезапускаем webserver (run_webserver.bat)
- Заходим в нашего бота в телеграм, обязательно говорим
/startзатем говорим/id- получаем наш id и прописываем его в mbplugin.ini в строку auth_id, если хотим разрешить телеграм с нескольких телефонов, прописываем всеidчерез запятую - Даем в ботика команду /balance или /balancefile, должен придти баланс в виде текста или файла.
- Чтобы бот автоматически слал балансы после опроса идем в настройки MobileBalance Плагины\После запроса, Добавить Редактировать Исполняемый файл Нажимаем на иконку файлика и указываем mbplugin\plugin\send_tgbalance.bat (помните что файл может придти в любое время и ботика тогда имеет смысл замьютить)
Данный вариант включен по умолчанию, при желании его можно явно указать добавив в секцию [Telegram] параметр tg_from = sqlite
В этом варианте бот берет из базы mbplugin, для того чтобы в боте были все балансы необходимо включить импорт данных из mdb базы mobilebalance
- Для работы бота необходимо в mbplugin.ini включить опцию
sqlitestore = 1 - Получить API-TOKEN - в телеграме идем в бота @BotFather даем команду
/newbotзадаем имя для бота, оно обязательно должно заканчиваться на ...bot и должно быть не занято, получаем сообщение с токеном бота вида 123456:AAFgshadfgjasdgfghadEklmn - В mbplugin.ini создаем секцию
[Telegram]
[Telegram]
api_token = <TELEGRAM API-TOKEN>
auth_id = ваши id через зяпятую (в начале просто оставьте пустым если пока не знаете)- Обязательно перезапускаем webserver (run_webserver.bat)
- Заходим в нашего бота в телеграм, обязательно говорим
/startзатем говорим/id- получаем наш id и прописываем его в mbplugin.ini в строку auth_id, если хотим разрешить телеграм с нескольких телефонов, прописываем всеidчерез запятую - Даем в ботика команду /balance или /balancefile, должен придти баланс в виде текста или файла.
- Чтобы бот автоматически слал балансы после опроса идем в настройки MobileBalance Плагины\После запроса, Добавить Редактировать Исполняемый файл Нажимаем на иконку файлика и указываем mbplugin\plugin\send_tgbalance.bat (помните что файл может придти в любое время и ботика тогда имеет смысл замьютить)
- Если вы хотите чтобы бот также показывал балансы не только по балансам полученным через mbplugin но и по обычным плагинам, необходимо включить опцию
updatefrommdb = 1(подробное описание в разделе про mbplugin.ini)
- В @BotFather можно еще дополнительно настроить команды и картинку, - делается это через команду /mybots Edit bot Edit Commands - чтобы команды были по нажатию на кнопку
[/]и Edit botpic - картинку бота
По умолчанию бот пытается соедениться напрямую, если вы работаете через прокси то можно включить соединение через прокси (в разделе ini файла [Telegram]) следующим образом:
- tg_proxy = auto будет пытаться брать настройки из браузера
- tg_proxy = https://адрес_прокси:порт явно указать настройки прокси
Представим, что у вас большой список балансов не только своих но и родителей и вы ходите чтобы родителям приходила информация только по их счетам.
Помимо общей рассылки и получения баланса по запросу можно добавить в секцию [Telegram] следующие строки (строк может быть сколько угодно, главное чтобы хвост XXX различался, например subscribtion1, subscribtion2 и т.д.)
subscribtionXXX = id:123456,234567 include:1111,2222 exclude:6666
где:
- id: список id телефонов (полученных командой /id)
- include: список строк по которым данные строки будут добавлены в выдачу
- exclued: список строк по которым данные будут убраны из выдачи
Ненужные параметры можно опустить, т.е. например
subscribtionXXX = id:123456 отправит на id 123456 результаты по всем номерам
subscribtionXXX = id:123456 include:1234 - отправит информацию по телефонам в логине или описании которых есть 1234
subscribtionXXX = id:123456 exclude:1234 - отправит информацию по телефонам в логине или описании которых отсутствует 1234
Если вы хотите чтобы и на управляющие телефоны приходили не все, а только отфильтрованные номера, то добавьте в секцию [Telegram] параметр send_balance_changes = 0 и создайте подписку на эти же id
Важное замечание, чтобы подписка приходила нужно зайти с указанных телефонов в вашего бота и нажать START
После настройки можно переключаться между вариантами без перезапуска web сервера меняя параметр tg_from на mobilebalance или sqlite
Для каждого компа заводите отдельного бота.
В папке mbplugin\log ведется журнал работы mbplugin
Запустите mbplugin\setup_and_check.bat он пересобирет плагины, настроит автозапуск web сервера для jsmbLH плагинов и проверит работу плагинов запуском обоих вариантов тестового плагина. На экран будет выведено примерно следующе
Compile to p_moex.dll
Compile to p_mts.dll
Compile to p_parking_mos.dll
Compile to p_sipnet.dll
Compile to p_smile-net.dll
Compile to p_sodexo.dll
Compile to p_stock.dll
Compile to p_strelka.dll
Compile to p_tele2.dll
Compile to p_test1.dll
Compile to p_test2.dll
Compile to p_usd.dll
Compile to p_zadarma.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_avtodor-tr.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_beeline.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_cardtel.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_danycom.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_eur.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_financeyahoo.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_megafon.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_moex.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_mts.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_parking_mos.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_sipnet.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_smile-net.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_sodexo.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_stock.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_strelka.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_tele2.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_test1.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_test2.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_usd.dll
C:\new\mobil\MobileBalance\Pluguns\mbplugin\dllsource\p_zadarma.dll
Перемещено файлов: 20.
Пересобираем JSMB LH plugin
Создаем lnk на run_webserver.bat и помещаем его в автозапуск и запускаем
Скопировано файлов: 1.
Проверяем что все работает JSMB LH PLUGIN
<html><meta charset="windows-1251"><p id=response>{"Balance": 124.45, "Balance2": 22, "Balance3": 33, "LicSchet": "Лицевой счет", "UserName": "ФИО", "TarifPlan": "Тарифный план", "BlockStatus": "Статус блокировки", "AnyString": "Любая строка", "SpendBalance": 12, "KreditLimit": 23, "Currenc": "Валюта", "Average": 5, "TurnOffStr": "Ожидаемая дата отключения", "Recomend": 54, "SMS": 43, "Min": 222, "SpendMin": 32, "Expired": "Дата истечения баланса/платежа", "ObPlat": 14, "Internet": 1234, "UslugiOn": "2/8"}</p></html>
Проверяем что все работает DLL PLUGIN
INFO:
<IssaPlugin>
<Operator>DLL p_test1</Operator>
<ShortName>p_test1</ShortName>
<Author>ArtyLa</Author>
<Version>Jun 28 2020</Version>
</IssaPlugin>
EXECUTE:
<Response><Balance>124.45</Balance><Balance2>22</Balance2><Balance3>33</Balance3><LicSchet>Лицевой счет</LicSchet><UserName>ФИО</UserName><TarifPlan>Тарифный план</TarifPlan><BlockStatus>Статус блокировки</BlockStatus><AnyString>Любая строка</AnyString><SpendBalance>12</SpendBalance><KreditLimit>23</KreditLimit><Currenc>Валюта</Currenc><Average>5</Average><TurnOffStr>Ожидаемая дата отключения</TurnOffStr><Recomend>54</Recomend><SMS>43</SMS><Min>222</Min><SpendMin>32</SpendMin><Expired>Дата истечения баланса/платежа</Expired><ObPlat>14</ObPlat><Internet>1234</Internet><UslugiOn>2/8</UslugiOn></Response>
Для продолжения нажмите любую клавишу . . .
Склонировать репозиторий c github (обновления можно так же будет накатывать через git pull)
git clone <https://github.com/artyl/mbplugin>загрузить и распаковать tcc и python:
tcc\get_tcc.bat
python\get_python.bat tkinter для python, если нужен ввод капчи для python к сожалению автоматом поставить не получиться, нашел только такой способ
Сборка всех DLL: dllsource\compile_all_p.bat
После этого все DLL будут находится в папке mbplugin\dllplugin
Если есть желание использовать свой питон, тогда можно поменять вызов в mbplugin\plugin\mbplugin.bat
Теперь есть два варианта использования jsmblh plugin (jsmb localhost) приоритетный вариант и старый вариант dllplugin jsmblh plugin мы подключаем из папки mbplugin\jsmblhplugin dllplugin из папки mbplugin\dllplugin
Для использования добавить в автозагрузку mbplugin\run_webserver.bat и подключить нужный плагин из папки mbplugin\jsmblhplugin
Вызов осуществляется через jsmb плагин, который передает параметры в webserver, который в свою очередь уже вызывает сам плагин. Плюсы - получаем все поля, которые могли использовать в jsmb плагинах, минусы - необходимо запускать webserver, также в этой схеме больше участия IE, и возможно глюков от замусоренного кэша IE будет больше.
!ВАЖНО! Не забывайте, что для работы jsmblhplugin должен быть запущен web server mbplugin\run_webserver.bat (при запущенном webserver появляется иконка в трее)
Для использования в MobileBalance подключить нужный dll плагин из папки mbplugin\dllplugin
Вызов плагина осуществляется через вызов DLL, плюс - минимальное участие IE, минус MB не все поля принимает обратно
Пути, жестко прописываются в DLL, в готовой сборке они смотрят в C:\mbplugin, если ваша папка отличается от этой, то запустите dllsource\compile_all_p.bat
Подключить DLL для нужных провайдеров (Настройки\Плагины\Операторы Добавить и выбрать DLL для нужных операторов)
В настройках для соответсвующего телефона выбрать провайдера соответствующей DLL
!ВАЖНО! Dll plugin привязан к той папке, куда настроен, если вы хотите переместить папку mbplugin в другое место, то после перемещения ОБЯЗАТЕЛЬНО запустите mbplugin\setup_and_check.bat
Если на python, то это файл с функцией get_balance(login, password, storename) storename это строка, используемая как ключ для хранения сессии. Формируется как имя плагина + login Функция возвращяет результат в виде словаря. Можно посмотреть как сделаны другие плагины, также есть простые тестовые. После того как плагин будет готов запускаем C:\mbplugin\setup_and_check.bat и будут пересобраны DLL и jsmbLH для всех имеющихся в папке C:\mbplugin\plugin плагинов. Подключаем полученный jsmbLH или DLL плагин в MobileBalance и используем его для получения баланса, не забывайте что для jsmbLH нужен запущенный веб сервер.
На компьютере работает веб сервер (по умолчению на 19777 порту, который принимает обращения из пустышек-jsmbLH плагинов и реализует обращение к самим плагинам). Работа самих плагинов не зависит от того кто их вызвал DLLplugin или jsmbLH плагин
ВАЖНО! DLL собраны 32 битном компиляторе, и вызываться должны из 32 битного приложения 32 битную DLL вызвать из 64 битного приложения нельзя.
Mobilebalance вызывает DLL передавая ей логин и пароль через xml строку
В самой DLL никакого функционала нет, она служит лишь оберткой для передачи вызова в mbplugin\plugin\mbplugin.bat
DLL вызывает mbplugin\plugin\mbplugin.bat передавая ему имя плагина в качестве параметра, а переданный XML через переменную окружения RequestVariable
mbplugin.bat вызывает mbplugin.py в котором вызывается соответсвующий python плагин.
mbplugin.bat возвращает результат через stdout.
Данные по параметрам вызова DLL были получены с помощью реверса существующего DLL плагина.
Я постарался сделать все так, чтобы все можно было собрать за 10 минут не устанавливая 10 гигабайтные компиляторы, минималистичная DLL весь код вынесен в скрипты.
Конечно DLL можно собрать и на vc и gpp и на Delphi и много на чем еще,
но для этого нужно много возни с установкой среды, в моем варианте все можно собрать с нуля за 10 минут скачав несколько десятков мегабайт.
Количество кода для DLL минимум, чтобы любой желающий мог без труда убедится что в нем нет закладок.
Остальной код на скриптах, и его можно проверить в любой момент. C я знаю не очень хорошо, поэтому единственный простой способ передать request я нашел через переменную окружения, а возврат осуществляется через поток вывода. Пути в папке mbplugin внутри DLL приходится прописывать абсолютными, потому что из DLL выяснить по какому пути она находится оказалось очень нетривиальной задачей, даже имя DLL узнать очень непросто. В принципе это проблема небольшая на tcc все пересобирается за пару секунд. Хотел сохранить настройки для путей в реестре, но из реестра прочитать оказалось тоже не просто. В результате у меня получилось сделать только так, код на C получился не очень хороший, но работоспособный. Если кто в состоянии причесать сишный код, буду признателен. Вызов bat файла а не напрямую скрипта python сделан для того чтобы если будет желание отвязаться от python, с минимумом изменений в остальном коде.
Т.к. в запросе передается только логин и пароль, то нам приходится сделать по отдельной DLL для каждого сервиса Чтобы оставить задел на будущее я для плагинов добавил еще префиксы, для питона это p_ Таким образом мы генерируем dll по следующему принципу: Для python плагина tele2 - файл плагина tele2.py tele2 - имя модуля на python который получает баланс p_tele2.dll - dll которую мы подключаем в mobilebalance
В процессе эксплуатации выяснилось, что mobilebalance оказывается все поля принимает из результата возвраженного DLLplugin, как оказалось, например не понимает остаток SMS, Список принимаемых полей достаточно короткий:
- Balance
- Expired
- Min
- Internet
- TarifPlan
- BlockStatus
- AnyString
Все кроме этого будет проигнорировано
Несмотря на то что на первый взгляд это все идет не через браузер mobilebalance все равно перед стартом DLL дергает движок IE (res://ieframe.dll/navcancl.htm и about:blank) - это видно по логу и появлению файлов в папке кэша IE, так что не исключаю, что часть каких-то глюков может по прежнему лечиться чисткой кэша браузера, хотя это и маловероятно.
ВАЖНО. В xml который возвращает плагин поля case sensitive, так что если будет balance вместо Balance MB будет писать что баланс равен нулю.
--- Структура request который приходит из mobilebalance через переменную окружения ----------
<?xml version="1.0" encoding="windows-1251" ?>
<Request>
<ParentWindow>007F09DA</ParentWindow>
<Login>loginlogin</Login>
<Password>password123456</Password>
</Request>---- В mobilebalance уходит xml через вывод на экран -------------
<Response><Balance>123</Balance></Response>