Skip to content

Commit

Permalink
Standalone version release
Browse files Browse the repository at this point in the history
  • Loading branch information
artyl committed Sep 24, 2020
1 parent 2a3cf25 commit 8e104e0
Show file tree
Hide file tree
Showing 12 changed files with 133 additions and 41 deletions.
9 changes: 9 additions & 0 deletions changelist.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,12 @@ avtodor-tr - Автодор транспондер
Небольшие правки в модуле по работе с puppeteer
Добавлен тестовый плагин test3 для тестирования puppeteer chrome (Его так же можно брать за основу)
Добавлен оператор a1.by (сотовая связь Беларусь) Автор плагина Exemok

## mbplugin 0.99.21 (24.09.20) Standalone version
В этой версии появилась возможность использовать mbplugin самостоятельно без mobilebalance, естественно возможен запуск только плагинов из mobilebalance
Новый плагин mosenergosbyt для исползоваия в поле логина пините логин/лицевой_счет
Новый плагин vscale, сделан больше для демонстрации новых возможностей.
Новый плагин currency заменил собой плагины eur, usd, moex и yahoo, для курса валют с сайта ЦБ пишите в поле логин код валюты USD, EUR и т.п.
Если хотите курсы c RBC пишите в логине RBC_USD, если хотите котировки валют с сайта биржи MOEX пишите MOEX_USD/RUB, Хотите котировки ценных бумаг MOEX_TATNP,
Хотите котировки с сайта finence.yahoo.com пишите YAHOO_AAPL
И наконец самое главное, но видимое только авторам плагинов. Писать плагины для движка хрома стало на порядок легче, код переработанных плагинов можно посмотреть в плагинах (test4, rostelecom, vscale, mosenergosbyt)
13 changes: 8 additions & 5 deletions plugin/dbengine.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,11 +161,14 @@ def write_result(self, plugin, login, result, commit=True):
line['QueryDateTime'] = datetime.datetime.now().replace(microsecond=0) # no microsecond
self.cur.execute(f"select cast(julianday('now')-julianday(max(QueryDateTime)) as integer) from phones where phonenumber='{login}' and operator='{plugin}' and abs(balance-{result['Balance']})>0.02")
line['NoChangeDays'] = self.cur.fetchall()[0][0] # Дней без изм.
options_ini = store.ini('Options.ini').read()
if 'Additional' in options_ini and 'AverageDays' in options_ini['Additional']:
average_days = int(options_ini['Additional']['AverageDays'])
else:
average_days = settings.ini['Options']['average_days']
try:
options_ini = store.ini('Options.ini').read()
if 'Additional' in options_ini and 'AverageDays' in options_ini['Additional']:
average_days = int(options_ini['Additional']['AverageDays'])
else:
average_days = settings.ini['Options']['average_days']
except:
average_days=30
self.cur.execute(f"select {line['Balance']}-balance from phones where phonenumber='{login}' and operator='{plugin}' and QueryDateTime>date('now','-{average_days} day') and strftime('%Y%m%d', QueryDateTime)<>strftime('%Y%m%d', date('now')) order by QueryDateTime desc limit 1")
qres = self.cur.fetchall()
if qres != []:
Expand Down
13 changes: 13 additions & 0 deletions plugin/httpserver_mobile.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,19 @@ def find_ini_up(fn):
if all_ini != []:
return all_ini[0]

def detbalance_standalone(filter=[]):
''' Получаем балансы самостоятельно без mobilebalance
Если filter пустой то по всем номерам из phones.ini
для автономной версии в поле Password2 находится незашифрованный пароль
ВНИМАНИЕ! при редактировании файла phones.ini через MobileBalance строки с паролями будут удалены
'''
phones = store.ini('phones.ini').phones()
for key,val in phones.items():
# Проверяем все у кого задан плагин, логин и пароль пароль
if val['Number'] != '' and val['Region'] != '' and val['Password2'] != '':
if filter == [] or val['Region'] in filter or val['Number'] in filter:
# TODO пока дергаем метод от вебсервера там уже все есть, потом может вынесем отдельно
getbalance_plugin('get',{'plugin':[val['Region']],'login':[val['Number']],'password':[val['Password2']],'date':['date']})

def getbalance_plugin(method, param_source):
'fplugin, login, password, date'
Expand Down
2 changes: 1 addition & 1 deletion plugin/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,6 @@
# host '127.0.0.1' - доступ только локально, '0.0.0.0' - разрешить доступ к по сети
'host': '127.0.0.1',
# формат вывода по умолчанию
'table_format': 'PhoneNumber,Operator,UslugiOn,Balance,RealAverage,BalDelta,BalDeltaQuery,NoChangeDays,CalcTurnOff,SpendMin,SMS,Internet,Minutes,TarifPlan,BlockStatus', # ? UserName
'table_format': 'PhoneNumber,Operator,UslugiOn,Balance,RealAverage,BalDelta,BalDeltaQuery,NoChangeDays,CalcTurnOff,SpendMin,SMS,Internet,Minutes,TarifPlan,BlockStatus,QueryDateTime', # ? UserName
},
}
4 changes: 4 additions & 0 deletions plugin/store.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,11 @@ def phones(self):
data[key] = {}
data[key]['NN'] = int(secnum)
data[key]['Alias'] = el.get('Alias','')
data[key]['Region'] = el.get('Region','')
data[key]['Number'] = el.get('Number','')
data[key]['PhoneDescription'] = el.get('PhoneDescription','')
data[key]['Monitor'] = el.get('Monitor','')
data[key]['Password2'] = el.get('Password2','')
return data

def read_stocks(stocks_name):
Expand Down
7 changes: 4 additions & 3 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ beeline - Билайн (сотовая связь)
megafon - Мегафон (сотовая связь)
tele2 - ТЕЛЕ2 (сотовая связь)
yota - Yota (сотовая связь)
a1by - A1(velcom) Беларусь (сотовая связь) (НОВЫЙ)
a1by - A1(velcom) Беларусь (сотовая связь)
rostelecom - Ростелеком (телефония и интернет)
danycom - Danycom (сотовая связь)
strelka - Баланс карты стрелка
Expand All @@ -45,8 +45,9 @@ 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 - Сайт мосэнергосбыт (ЖКХ)
parking_mos - parking.mos.ru оплата парковки (Вход через логин/пароль на login.mos.ru)
mosenergosbyt - Сайт мосэнергосбыт (ЖКХ)
vscale - Облачные серверы для разработчиков

## Кроме простого использования есть еще:
Телеграм бот
Expand Down
3 changes: 2 additions & 1 deletion setup_and_check.bat
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
@echo OFF
%~d0
cd "%~dp0"


@REM ¤®¡ ¢«ï¥¬ ¢ sys.path ¯®¨áª ¢ ¯ ¯ª¥ ®âªã¤  § ¯ã饭 áªà¨¯â ¯® 㬮«ç ­¨î, ¢ embedded ®­ ¯®ç¥¬ã-â® ¢ëª«î祭
cd python
..\python\python -c "txt='''import os,sys\nsys.path.insert(0,os.path.split(sys.argv[0])[0])''';open('sitecustomize.py','w').write(txt)"


cd "%~dp0"
echo ¥à¥á®¡¨à ¥¬ DLL
call dllsource\compile_all_p.bat
Expand Down
3 changes: 0 additions & 3 deletions standalone/Options.ini

This file was deleted.

3 changes: 0 additions & 3 deletions standalone/check_balance.bat

This file was deleted.

54 changes: 54 additions & 0 deletions standalone/mbstandalone.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
@echo OFF
%~d0
cd "%~dp0"

REM …᫨ «¥¦¨â mobilebalance - ­¥ à ¡®â ¥¬,   ⮠⮫쪮 § ¯ãâ ¥¬ ¢á¥å
if EXIST MobileBalance.exe goto :ERROR1
REM …᫨ ­¥â Phones.ini - ⮠⮦¥ ¢ë室¨â
if not EXIST phones.ini goto :ERROR1

REM …᫨ ­¥â mbplugin.ini - ᮧ¤ ¥¬ ¨ § ¯ã᪠¥¬ ¨­¨æ¨ «¨§ æ¨î
if not EXIST mbplugin.ini goto :INIT

if "%1"=="init" goto :INIT

if "%1"=="check" goto :CHECK

if "%1"=="getbalance" goto :GETBALANCE

GOTO :EOF


@REM ˆ­¨æ¨ «¨§ æ¨ï
:INIT
cd mbplugin\plugin
cd ..\plugin
..\python\python -c "import store;ini=store.ini();ini.read();ini.ini['Options']['sqlitestore']='1';ini.write()"
..\python\python -c "import store;ini=store.ini();ini.read();ini.ini['Options']['createhtmlreport']='1';ini.write()"
..\python\python -c "import store,os;ini=store.ini();ini.read();ini.ini['Options']['balance_html']=os.path.abspath('..\\..\\balance.html');ini.write()"
echo %CD%
call ..\setup_and_check.bat
GOTO :EOF

@REM à®¢¥àª  INI ­  ª®à४⭮áâì
:CHECK
ECHO à®¢¥àªã ᤥ« î ¯®§¦¥, ¯®ª  ¥¥ ­¥â
cd mbplugin\plugin
cd ..\plugin
..\python\python -c "import store;ini=store.ini()"
..\python\python -c "import store;ini=store.ini('phones.ini')"
timeout 15
GOTO :EOF

@REM ®«ã祭¨¥ ¡ « ­á®¢
:GETBALANCE
cd mbplugin\plugin
cd ..\plugin
..\python\python.exe -c "import httpserver_mobile,sys;httpserver_mobile.detbalance_standalone(filter=sys.argv[2:])" %*
GOTO :EOF

:ERROR1
ECHO ‚ ¯ ¯ª¥ ­¥ ¤®«¦­® ¡ëâì ä ©«  Mobilebalance.exe
ECHO ˆ ¤®«¦¥­ ¡ëâì ä ©« Phones.ini
timeout 15
GOTO :EOF
2 changes: 2 additions & 0 deletions standalone/phones.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ Region = p_test1
Monitor = TRUE
Alias = Èâàíû÷
Number = 9161112233
Password2 = 123password

[Phone] #2
Region = p_test3
Monitor = TRUE
Alias = Ïåòðîâè÷
Number = [email protected]
Password2 = demo
61 changes: 36 additions & 25 deletions standalone/readme.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,36 @@
Вариант работающий на текущем коде
1. Распаковать папку mbplugin куда-нибудь
2. !!!. До того как запускать setup_and_check.bat положить содержимое
этой папки (mbplugin\standalone) в папку в которую распаковали mbplugin
3. Запустить setup_and_check.bat
4. Включить запись в sqlite базу в mbpluhin.ini
sqlitestore = 1
5. Настроить телефоны в phones.ini см пример.
ВАЖНО номера секций не должны повторяться
6. В check_balance.bat прописать вызовы получения баланса

Текущие проблемы
Слабая диагностика ошибок в phones.ini который пока правится руками

TODO
Сделать скрипт на инициализацию автономной версии с правильными настройками
инициализация возможна, если в папке отсутствует mobilebalance.exe
Хранить пароли в phones.ini
Сделать скрипт check_phones который будет проверять корректность phones.ini на предмет номеров секций
правильного наименования плагинов и т.п.
Сделать скрипт который будет получать балансы с помощью данных из phones.ini
пароли от ЛК будем хранить в нем.
Скрипт запущенный без параметров получит все балансы, либо с параметром - параметр будет исользован как фильтр какие балансы получать.
Еще вариант - запросить неудачные попытки
В дальнейшем это частично переедет в вебсервер, где будет шедулер и подобный функционал.
# Самостоятельно работающая версия

## Вариант работающий на текущем коде

Все это пока глубокая бэта для желающих поиграться. Возможно в процессе становления будут какие-то изменения с хранением настроек, но сама база вряд ли поменяется.

## Итак инструкция по установке

1. Создаем в удобном месте папку mbstandalone (название можете выбрать какое нравиться, это не принципиально)
2. Распаковываем в эту папку содержимое архива (папка mbplugin)
3. Из папки mbplugin\standalone перекладываем файлы в корень папки mbstandalone
4. Запустить ```mbstandalone.bat``` без параметров или с параметром init (при первом запуске он настроит параметры по умолчанию и создаст базу BalanceHistory.sqlite для хранения результатов)
5. Настроить телефоны в phones.ini, в папке mbplugin\standalone уже находится настроенный пример с двумя телефонами
ВАЖНО номера секций ([Phone] #2) не должны повторяться
6. Для проверки корректности ini файлов запустить ```mbstandalone.bat check``` диагностика пока так себе, со временем будем в эту сторону копать
7. Для получения балансов ```mbstandalone.bat getbalance```
8. Если нужно получить по части балансов запустите ```mbstandalone.bat getbalance filter1 filter2 ...``` будут получены только балансы у которых один из фильтров совпадет с плагином или логином
9. Для настройки автоматической проверки баланса необходимо по какому-то расписанию запускать ```mbstandalone.bat chechbalance``` например через системный планировщик ```taskschd.msc```либо как-то еще

## Для инфо

* На текущий момент доступен только просмотр веб страницы с балансом [http://localhost:19777/report](http://localhost:19777/report), открыть его можно выбрав Open report через иконку вебсервера в системном трее.
* Также данная страница сохраняется в виде файла balance.html в корневой папке standalone версии
* В Standalone версии для получения баланса не требуется веб сервер, веб сервер нужен только для показа информации
* Все данные по балансам хранятся в файле BalanceHistory.sqlite в корне проекта, это база данных sqllite при желании можно поработать с ней из бругин програ для построения какой-то аналитики.
* При желании можно настроить телеграм бота так же как для обычной версии, но только по варианту 2 (см общий readme раздел Телеграм бот вариант 2 (получаем балансы из sqlite))
* При желании можно запустить несколько mbplugin одновременно из разных папок на разных портах, но возможны коллизии при управлении хромом, когда несколько разных плагинов попытаются запускать их одновременно

## Текущие проблемы

Слабая диагностика ошибок в phones.ini который пока правится руками.

## Дальнейшее развитие

* Запросить неудачные попытки
* В дальнейшем это частично переедет в вебсервер, где будет шедулер и подобный функционал.

0 comments on commit 8e104e0

Please sign in to comment.