[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 import PagesBrowser, URL
|
||||||
from weboob.browser.profiles import Firefox
|
from weboob.browser.profiles import Firefox
|
||||||
from .calendar import SensCritiquenCalendarEvent
|
|
||||||
from .pages import AjaxPage, EventPage, JsonResumePage
|
from .pages import AjaxPage, EventPage, JsonResumePage
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
@ -71,7 +70,7 @@ class SenscritiqueBrowser(PagesBrowser):
|
||||||
|
|
||||||
def set_package_settings(self, package, channels):
|
def set_package_settings(self, package, channels):
|
||||||
url = 'http://www.senscritique.com/sc/tv_guides/saveSettings.json'
|
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 = "network=%s" % package
|
||||||
params += ''.join(["&channels%%5B%%5D=%d" % (channel) for channel in channels])
|
params += ''.join(["&channels%%5B%%5D=%d" % (channel) for channel in channels])
|
||||||
self.open(url, data=params)
|
self.open(url, data=params)
|
||||||
|
|
@ -115,26 +114,28 @@ class SenscritiqueBrowser(PagesBrowser):
|
||||||
while True:
|
while True:
|
||||||
self.DATA['page'] = '%d' % page_nb
|
self.DATA['page'] = '%d' % page_nb
|
||||||
page = self.ajax_page.open(data=self.DATA)
|
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()
|
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
|
break
|
||||||
|
|
||||||
page += 1
|
page_nb += 1
|
||||||
|
|
||||||
if event:
|
if event:
|
||||||
if not isinstance(event, SensCritiquenCalendarEvent):
|
_id = _id.split('#')[0]
|
||||||
event = event.next()
|
|
||||||
|
|
||||||
event._resume = self.get_resume(_id)
|
|
||||||
|
|
||||||
self._setup_session(Firefox())
|
self._setup_session(Firefox())
|
||||||
event = self.event_page.go(_id=_id).get_event(obj=event)
|
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
|
return event
|
||||||
|
|
||||||
def get_resume(self, _id):
|
def get_resume(self, _id):
|
||||||
self.set_json_header()
|
self.set_json_header()
|
||||||
re_id = re.compile('^/?.*/(.*)', re.DOTALL)
|
re_id = re.compile('^/?.*/(.*)', re.DOTALL)
|
||||||
a_id = re_id.search(_id.split('#')[0]).group(1)
|
_id = re_id.search(_id).group(1)
|
||||||
return self.json_page.go(_id=a_id).get_resume()
|
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):
|
for item in self.browser.list_events(date_from, date_to, package, channels):
|
||||||
items.append(item)
|
items.append(item)
|
||||||
|
|
||||||
items.sort(key=lambda o:o.start_date)
|
items.sort(key=lambda o: o.start_date)
|
||||||
return items
|
return items
|
||||||
|
|
||||||
def get_event(self, _id, event=None):
|
def get_event(self, _id, event=None):
|
||||||
|
|
|
||||||
|
|
@ -17,14 +17,13 @@
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from weboob.tools.html import html2text
|
|
||||||
from .calendar import SensCritiquenCalendarEvent
|
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.pages import HTMLPage, JsonPage
|
||||||
from weboob.browser.elements import ItemElement, ListElement, method
|
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
|
from weboob.browser.filters.html import Link, Attr
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -131,10 +130,6 @@ class AjaxPage(HTMLPage):
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
class CombineDate(Filter):
|
|
||||||
def filter(self, _date):
|
|
||||||
return datetime.combine(_date, time.max)
|
|
||||||
|
|
||||||
class Summary(Filter):
|
class Summary(Filter):
|
||||||
def filter(self, el):
|
def filter(self, el):
|
||||||
title = Regexp(Attr('div/img', 'alt'), '^Affiche(.*)')(el[0])
|
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"]')),
|
FormatDate("%Y%m%d%H%M", Date('div/div[@class="elgr-data-diffusion"]')),
|
||||||
CleanText(Channel('.'), replace=[(' ', '-')]))
|
CleanText(Channel('.'), replace=[(' ', '-')]))
|
||||||
obj_start_date = Date('div/div[@class="elgr-data-diffusion"]')
|
obj_start_date = Date('div/div[@class="elgr-data-diffusion"]')
|
||||||
obj_end_date = CombineDate(obj_start_date)
|
|
||||||
obj_summary = CleanText(Summary('.'))
|
obj_summary = CleanText(Summary('.'))
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -161,30 +155,13 @@ class Description(Filter):
|
||||||
Join(u'- %s\n', "%s/ul/li" % section))(el[0])
|
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):
|
class EventPage(HTMLPage):
|
||||||
@method
|
@method
|
||||||
class get_event(ItemElement):
|
class get_event(ItemElement):
|
||||||
klass = SensCritiquenCalendarEvent
|
klass = SensCritiquenCalendarEvent
|
||||||
|
|
||||||
def parse(self, el):
|
obj_url = BrowserURL('event_page', _id=Env('_id'))
|
||||||
event = self.obj
|
obj_description = Description('.')
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
class JsonResumePage(JsonPage):
|
class JsonResumePage(JsonPage):
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
# 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
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -26,10 +26,7 @@ class SenscritiqueTest(BackendTest):
|
||||||
MODULE = 'senscritique'
|
MODULE = 'senscritique'
|
||||||
|
|
||||||
def test_senscritique(self):
|
def test_senscritique(self):
|
||||||
try:
|
l = list(self.backend.list_events(datetime.now()))
|
||||||
l = list(self.backend.list_events(datetime.now()))
|
assert len(l)
|
||||||
assert len(l)
|
event = self.backend.get_event(l[0].id)
|
||||||
event = self.backend.get_event(l[0].id)
|
self.assertTrue(event.url, 'URL for event "%s" not found: %s' % (event.id, event.url))
|
||||||
self.assertTrue(event.url, 'URL for event "%s" not found: %s' % (event.id, event.url))
|
|
||||||
except StopIteration:
|
|
||||||
raise SkipTest("Max iteration reach")
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue