Skip to content

Commit

Permalink
mts cashback get from render
Browse files Browse the repository at this point in the history
  • Loading branch information
artyl committed May 19, 2024
1 parent ecf147f commit b014aed
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 11 deletions.
3 changes: 3 additions & 0 deletions changelist.md
Original file line number Diff line number Diff line change
Expand Up @@ -610,3 +610,6 @@ ADD: новый плагин discovery поможет со сборкой дан
FIX: rostelecom web lk.rt.ru, и как оказалось в форму логина ростелеком добавил ума и определяет по тому что написали в поле логин что это - тел, email, логин или ЛС и сам переключается в нужную закладку, так что для входа можно использовать любой из вариантов оно само отработает, с моей стороны даже делать ничего не пришлось, главное на старте переключиться с вкладки номера телефона, иначе не даст ввести номер лицевого счета, аналогично кстати в onlime, который my.rt.ru
FIX: Восстановлена возможность отключить запись скриншотов и подробного лога работы в плагине МТС, теперь log_responses=0 отключает запись
ADD: Rostelecom balance2 (bonus) PR #47 from Comprech

## mbplugin v1.00.73 (19.05.24) mts cashback balance
FIX: МТС перестал отдавать баланс кэшбэка в api/cashback/account, приходится его брать из рендеренной страницы.
32 changes: 21 additions & 11 deletions plugin/mts.py
Original file line number Diff line number Diff line change
Expand Up @@ -456,17 +456,7 @@ def wait_state(timeout=30):
if options('mts_balance_from').lower() == 'amount':
logging.info('force get balance from for=api/accountInfo/mscpBalance..amount')
result['Balance'] = round(mccsp_balance['amount'], 2)
cashback_page = pd.get_response_body_json('for=api/cashback/account')
# pd.jsformula('for=api/cashback/account', "parseFloat(data.data.balance).toFixed(2)")
cashback_data = cashback_page.get('data', {})
if 'balance' in cashback_data:
result['Balance2'] = round(cashback_data['balance'], 2)
counters = pd.get_response_body_json('for=api/sharing/counters').get('data', {}).get('counters', [])
if 'Balance' in result and 'Balance2' in result:
try:
result['Balance3'] = float(result['Balance']) + float(result['Balance2'])
except Exception:
logging.info(f'Не смогли сложить балансы {store.exception_text()}')
if type(counters) == list and len(counters) > 0:
# deadlineDate
deadline_dates = set([i['deadlineDate'] for i in counters if 'deadlineDate' in i])
Expand Down Expand Up @@ -507,7 +497,27 @@ def wait_state(timeout=30):
result['Internet'] = round(nonused[0] * unitMult / unitDiv, 2)
if (mts_usedbyme == '1' or login in mts_usedbyme.split(',')) and usedbyme != []:
result['Internet'] = round(usedbyme[0] * unitMult / unitDiv, 2)

cashback_page = pd.get_response_body_json('for=api/cashback/account')
# pd.jsformula('for=api/cashback/account', "parseFloat(data.data.balance).toFixed(2)")
cashback_data = cashback_page.get('data', {})
if 'balance' in cashback_data:
logging.info('Пытаемся взять cashback баланс из for=api/cashback/account')
result['Balance2'] = round(cashback_data['balance'], 2)
else:
try:
logging.info('Пытаемся взять cashback баланс с рендера страницы')
balance2_text = pd.page_eval(r"document.querySelector('.mts-widget-mobile-cashback__price').innerText.replace(/[^\d,.]/g,'').replace(',','.')")
if len(balance2_text) > 0:
result['Balance2'] = round(float(balance2_text), 2)
else:
logging.info(f'На странице не нашли информации о балансе cashback')
except Exception:
logging.info(f'Не смогли взять баланс с рендера {store.exception_text()}')
if 'Balance' in result and 'Balance2' in result:
try:
result['Balance3'] = float(result['Balance']) + float(result['Balance2'])
except Exception:
logging.info(f'Не смогли сложить балансы {store.exception_text()}')
store.feedback.text(f"Uslugi", append=True)
pd.send('Page.navigate', {'url': 'https://lk.mts.ru/uslugi/podklyuchennye'})
# ждем longtask тормозную страницу
Expand Down
1 change: 1 addition & 0 deletions standalone.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,6 +174,7 @@ Password2 = 123password
* __В Standalone версии для получения баланса не требуется веб-сервер__, веб-сервер нужен только для показа информации и обработки команд телеграм ботом. Так что если вы не собираетесь пользоваться телеграм ботом и встроенным шедулером, а балансы смотреть через сгенеренную страничку balance.html с диска то web сервер можно не запускать. Отправка балансов в телеграм через send_tgbalance_onlysend.bat, также работает без веб-сервера.
* Какой оператор указывается в phones.ini (пример файла phones.ini смотрите в папке standalone) в поле Region плагины - это файлы в папке mbplugin\plugin т.е. например для плагина mts файл mts.py, а в поле нужно будет указать ```Region=p_mts``` т.е. с префиксом p_ и без расширения
* На текущий момент доступен только просмотр веб страницы с балансом [http://localhost:19777/report](http://localhost:19777/report), открыть его можно, выбрав Open report через иконку веб-сервера в системном трее, либо без веб-сервера можно открыть balance.html в корневой папке standalone версии
* Можно сделать несколько альтернативных наборов колонок, добавив в ini параметр, например table_format1, и открывать [http://localhost:19777/report1](http://localhost:19777/report1)
* Для просмотра истории по балансу установите параметр RealAverageDays=число дней просмотра истории. Помните, что чем больше дней, тем дольше строится страница с балансом. История баланса будет отображаться при наведении мышкой на баланс.
* Все данные по балансам хранятся в файле BalanceHistory.sqlite в корне проекта, это база данных sqlite при желании можно поработать с ней из других программ для построения какой-то аналитики.
* При желании можно настроить телеграм бота так же как для обычной версии, но только по варианту 2 (tg_from = sqlite, см общий readme раздел Телеграм бот вариант 2 (получаем балансы из sqlite))
Expand Down

0 comments on commit b014aed

Please sign in to comment.