From b014aedd68962b95094b3c86295bf23e457241b4 Mon Sep 17 00:00:00 2001 From: Artem Lavrenov Date: Sun, 19 May 2024 20:00:42 +0300 Subject: [PATCH] mts cashback get from render --- changelist.md | 3 +++ plugin/mts.py | 32 +++++++++++++++++++++----------- standalone.md | 1 + 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/changelist.md b/changelist.md index 7c519e2..508f005 100644 --- a/changelist.md +++ b/changelist.md @@ -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, приходится его брать из рендеренной страницы. diff --git a/plugin/mts.py b/plugin/mts.py index 4c833f5..1b16242 100644 --- a/plugin/mts.py +++ b/plugin/mts.py @@ -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]) @@ -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 тормозную страницу diff --git a/standalone.md b/standalone.md index eb629be..d39534b 100644 --- a/standalone.md +++ b/standalone.md @@ -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))