diff --git a/modules/senscritique/browser.py b/modules/senscritique/browser.py index 34a113f5..ac7075be 100644 --- a/modules/senscritique/browser.py +++ b/modules/senscritique/browser.py @@ -19,7 +19,6 @@ from weboob.browser import PagesBrowser, URL from weboob.browser.profiles import Firefox -from .calendar import SensCritiquenCalendarEvent from .pages import AjaxPage, EventPage, JsonResumePage import re @@ -71,7 +70,7 @@ class SenscritiqueBrowser(PagesBrowser): def set_package_settings(self, package, channels): url = 'http://www.senscritique.com/sc/tv_guides/saveSettings.json' - #do not use a dict because there are several same keys + # do not use a dict because there are several same keys params = "network=%s" % package params += ''.join(["&channels%%5B%%5D=%d" % (channel) for channel in channels]) self.open(url, data=params) @@ -115,26 +114,28 @@ class SenscritiqueBrowser(PagesBrowser): while True: self.DATA['page'] = '%d' % page_nb page = self.ajax_page.open(data=self.DATA) - event = page.list_events(_id=_id) + try: + event = page.list_events(_id=_id).next() + except StopIteration: + event = None + nb_events = page.count_events() - if event or nb_events < self.LIMIT or page >= self.LIMIT_NB_PAGES: + if event or nb_events < self.LIMIT or page_nb >= self.LIMIT_NB_PAGES: break - page += 1 + page_nb += 1 if event: - if not isinstance(event, SensCritiquenCalendarEvent): - event = event.next() - - event._resume = self.get_resume(_id) - + _id = _id.split('#')[0] self._setup_session(Firefox()) event = self.event_page.go(_id=_id).get_event(obj=event) - + resume = self.get_resume(_id) + if resume: + event.description += self.get_resume(_id) return event def get_resume(self, _id): self.set_json_header() re_id = re.compile('^/?.*/(.*)', re.DOTALL) - a_id = re_id.search(_id.split('#')[0]).group(1) - return self.json_page.go(_id=a_id).get_resume() + _id = re_id.search(_id).group(1) + return self.json_page.go(_id=_id).get_resume() diff --git a/modules/senscritique/module.py b/modules/senscritique/module.py index a17a946a..9a21047f 100644 --- a/modules/senscritique/module.py +++ b/modules/senscritique/module.py @@ -111,7 +111,7 @@ class SenscritiqueModule(Module, CapCalendarEvent): for item in self.browser.list_events(date_from, date_to, package, channels): items.append(item) - items.sort(key=lambda o:o.start_date) + items.sort(key=lambda o: o.start_date) return items def get_event(self, _id, event=None): diff --git a/modules/senscritique/pages.py b/modules/senscritique/pages.py index e14d125c..7936607e 100644 --- a/modules/senscritique/pages.py +++ b/modules/senscritique/pages.py @@ -17,14 +17,13 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.html import html2text from .calendar import SensCritiquenCalendarEvent -from datetime import date, datetime, time, timedelta +from datetime import date, datetime, timedelta from weboob.browser.pages import HTMLPage, JsonPage from weboob.browser.elements import ItemElement, ListElement, method -from weboob.browser.filters.standard import Filter, CleanText, Regexp, Join, Format +from weboob.browser.filters.standard import Filter, CleanText, Regexp, Join, Format, BrowserURL, Env from weboob.browser.filters.html import Link, Attr @@ -131,10 +130,6 @@ class AjaxPage(HTMLPage): return False - class CombineDate(Filter): - def filter(self, _date): - return datetime.combine(_date, time.max) - class Summary(Filter): def filter(self, el): title = Regexp(Attr('div/img', 'alt'), '^Affiche(.*)')(el[0]) @@ -146,7 +141,6 @@ class AjaxPage(HTMLPage): FormatDate("%Y%m%d%H%M", Date('div/div[@class="elgr-data-diffusion"]')), CleanText(Channel('.'), replace=[(' ', '-')])) obj_start_date = Date('div/div[@class="elgr-data-diffusion"]') - obj_end_date = CombineDate(obj_start_date) obj_summary = CleanText(Summary('.')) @@ -161,30 +155,13 @@ class Description(Filter): Join(u'- %s\n', "%s/ul/li" % section))(el[0]) -class Resume(Filter): - def filter(self, el): - _resume = el[0].xpath("p[@data-rel='full-resume']") - if not _resume: - _resume = el[0].xpath("p[@data-rel='small-resume']") - if _resume: - resume = html2text(CleanText(_resume[0])(self))[6:] - return resume - - class EventPage(HTMLPage): @method class get_event(ItemElement): klass = SensCritiquenCalendarEvent - def parse(self, el): - event = self.obj - event.url = self.page.url - resume = Resume('//section[@class="pvi-productDetails"]')(self) - if not resume: - resume = self.obj._resume - description = Description('.')(self) - event.description = u'%s%s' % (description, resume) - return event + obj_url = BrowserURL('event_page', _id=Env('_id')) + obj_description = Description('.') class JsonResumePage(JsonPage): diff --git a/modules/senscritique/test.py b/modules/senscritique/test.py index 19b4aa4e..7d374264 100644 --- a/modules/senscritique/test.py +++ b/modules/senscritique/test.py @@ -18,7 +18,7 @@ # along with weboob. If not, see . -from weboob.tools.test import BackendTest, SkipTest +from weboob.tools.test import BackendTest from datetime import datetime @@ -26,10 +26,7 @@ class SenscritiqueTest(BackendTest): MODULE = 'senscritique' def test_senscritique(self): - try: - l = list(self.backend.list_events(datetime.now())) - assert len(l) - event = self.backend.get_event(l[0].id) - self.assertTrue(event.url, 'URL for event "%s" not found: %s' % (event.id, event.url)) - except StopIteration: - raise SkipTest("Max iteration reach") + l = list(self.backend.list_events(datetime.now())) + assert len(l) + event = self.backend.get_event(l[0].id) + self.assertTrue(event.url, 'URL for event "%s" not found: %s' % (event.id, event.url))