[senscritique] improve module code
This commit is contained in:
parent
71347cb8f7
commit
26e9763d51
4 changed files with 24 additions and 49 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue