From 4fda096571273f12d8e18ea5630afab9c456b22b Mon Sep 17 00:00:00 2001 From: Vincent A Date: Sun, 5 Jul 2020 16:38:40 +0200 Subject: [PATCH] [bouygues] implement CapMessagesPost --- modules/bouygues/browser.py | 10 ++++++++++ modules/bouygues/module.py | 11 +++++++++-- modules/bouygues/pages.py | 15 +++++++++++++++ 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/modules/bouygues/browser.py b/modules/bouygues/browser.py index 09dbf6126d..20fce3676f 100644 --- a/modules/bouygues/browser.py +++ b/modules/bouygues/browser.py @@ -30,6 +30,7 @@ from .pages import ( LoginPage, ForgottenPasswordPage, AppConfigPage, SubscriberPage, SubscriptionPage, SubscriptionDetail, DocumentPage, DocumentDownloadPage, DocumentFilePage, + SendSMSPage, ) @@ -57,6 +58,9 @@ class BouyguesBrowser(LoginBrowser): documents_page = URL(r'/comptes-facturation/(?P\d+)/factures(\?|$)', DocumentPage) document_download_page = URL(r'/comptes-facturation/(?P\d+)/factures/.*(\?|$)', DocumentDownloadPage) + send_sms = URL(r'https://www.secure.bbox.bouyguestelecom.fr/services/SMSIHD/sendSMS.phtml', SendSMSPage) + confirm_sms = URL(r'https://www.secure.bbox.bouyguestelecom.fr/services/SMSIHD/resultSendSMS.phtml') + def __init__(self, username, password, lastname, *args, **kwargs): super(BouyguesBrowser, self).__init__(username, password, *args, **kwargs) self.lastname = lastname @@ -130,3 +134,9 @@ def iter_documents(self, subscription): def download_document(self, document): if document.url: return self.location(document.url, headers=self.headers).content + + @need_login + def post_message(self, receivers, content): + self.send_sms.go() + self.page.post_message(receivers, content) + self.confirm_sms.open() # no params: stateful?! diff --git a/modules/bouygues/module.py b/modules/bouygues/module.py index 5de4d4bad1..8f0832babc 100644 --- a/modules/bouygues/module.py +++ b/modules/bouygues/module.py @@ -19,10 +19,10 @@ from __future__ import unicode_literals - from weboob.tools.backend import Module, BackendConfig from weboob.capabilities.base import find_object from weboob.capabilities.bill import CapDocument, Document, SubscriptionNotFound, Subscription, DocumentNotFound +from weboob.capabilities.messages import CapMessagesPost from weboob.tools.value import Value, ValueBackendPassword from .browser import BouyguesBrowser @@ -31,7 +31,7 @@ __all__ = ['BouyguesModule'] -class BouyguesModule(Module, CapDocument): +class BouyguesModule(Module, CapDocument, CapMessagesPost): NAME = 'bouygues' DESCRIPTION = 'Bouygues Télécom' MAINTAINER = 'Florian Duguet' @@ -66,3 +66,10 @@ def download_document(self, document): if not isinstance(document, Document): document = self.get_document(document) return self.browser.download_document(document) + + def post_message(self, message): + receivers = message.receivers + if not receivers: + assert message.thread + receivers = [message.thread.id] + self.browser.post_message(receivers, message.content) diff --git a/modules/bouygues/pages.py b/modules/bouygues/pages.py index 8d834fbf99..da6efe2cec 100644 --- a/modules/bouygues/pages.py +++ b/modules/bouygues/pages.py @@ -144,3 +144,18 @@ class DocumentFilePage(LoggedPage, RawPage): # since url of this file is almost the same than url of DocumentDownloadPage (which is a JsonPage) # we have to define it to avoid mismatching pass + + +class SendSMSPage(LoggedPage, HTMLPage): + def post_message(self, receivers, content): + form = self.get_form(name='formSMS') + + quota_text = CleanText('.//strong')(form.el) + quota = int(re.search(r'(\d+) SMS gratuit', quota_text)[1]) + self.logger.info('quota: %d messages left', quota) + if not quota: + raise Exception('quota exceeded') + + form['fieldMsisdn'] = ';'.join(receivers) + form['fieldMessage'] = content + form.submit() -- GitLab