[senscritique] improve module code

This commit is contained in:
Bezleputh 2014-12-19 15:59:02 +01:00 committed by Florent Fourcot
commit 26e9763d51
4 changed files with 24 additions and 49 deletions

View file

@ -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()

View file

@ -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):

View file

@ -17,14 +17,13 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
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):

View file

@ -18,7 +18,7 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
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))