From 21e53d68370058698d1c9dfc7fbfc0888c391c98 Mon Sep 17 00:00:00 2001 From: Bezleputh Date: Fri, 6 Jun 2014 11:55:42 +0200 Subject: [PATCH] [senscritique] fix bug in network selection --- modules/senscritique/browser.py | 30 ++++++++--------- modules/senscritique/pages.py | 58 +++++++++++++++++---------------- 2 files changed, 43 insertions(+), 45 deletions(-) diff --git a/modules/senscritique/browser.py b/modules/senscritique/browser.py index 371d6ad9..c21266b2 100644 --- a/modules/senscritique/browser.py +++ b/modules/senscritique/browser.py @@ -17,8 +17,7 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from weboob.tools.browser2 import PagesBrowser, URL, Profile, Firefox - +from weboob.tools.browser2 import PagesBrowser, URL, Firefox from .calendar import SensCritiquenCalendarEvent from .pages import AjaxPage, EventPage, JsonResumePage @@ -28,9 +27,10 @@ from lxml.etree import XMLSyntaxError __all__ = ['SenscritiqueBrowser'] -class SensCritiqueAjaxProfile(Profile): - def setup_session(self, session): - session.headers.update({"User-Agent": "Mozilla/5.0 (Windows; U; Windows " +class SenscritiqueBrowser(PagesBrowser): + + def set_ajax_header(self): + self.session.headers.update({"User-Agent": "Mozilla/5.0 (Windows; U; Windows " "NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" " GTB7.1 (.NET CLR 3.5.30729)", "Accept": "text/html, */*; q=0.01", @@ -41,18 +41,14 @@ class SensCritiqueAjaxProfile(Profile): "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", }) - -class SensCritiqueJsonProfile(Profile): - def setup_session(self, session): - session.headers.update({"User-Agent": "Mozilla/5.0 (Windows; U; Windows " + def set_json_header(self): + self.session.headers.update({"User-Agent": "Mozilla/5.0 (Windows; U; Windows " "NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" " GTB7.1 (.NET CLR 3.5.30729)", "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest", }) - -class SenscritiqueBrowser(PagesBrowser): ENCODING = 'utf-8' BASEURL = 'http://www.senscritique.com' @@ -74,9 +70,9 @@ class SenscritiqueBrowser(PagesBrowser): def set_package_settings(self, package, channels): url = 'http://www.senscritique.com/sc/tv_guides/saveSettings.json' - params = {'network': package} - for channel in channels: - params['channels[]'] = channel + #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) def list_events(self, date_from, date_to=None, package=None, channels=None): @@ -84,10 +80,10 @@ class SenscritiqueBrowser(PagesBrowser): self.program_page.go() page_nb = 1 + self.set_ajax_header() if package and channels: self.set_package_settings(package, channels) - self._setup_session(SensCritiqueAjaxProfile()) while True: try: self.DATA['page'] = '%d' % page_nb @@ -111,7 +107,7 @@ class SenscritiqueBrowser(PagesBrowser): self.program_page.go() page_nb = 1 - self._setup_session(SensCritiqueAjaxProfile()) + self.set_ajax_header() while True: self.DATA['page'] = '%d' % page_nb page = self.ajax_page.open(data=self.DATA) @@ -134,7 +130,7 @@ class SenscritiqueBrowser(PagesBrowser): return event def get_resume(self, _id): - self._setup_session(SensCritiqueJsonProfile()) + 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() diff --git a/modules/senscritique/pages.py b/modules/senscritique/pages.py index 0eac7918..5f66d41a 100644 --- a/modules/senscritique/pages.py +++ b/modules/senscritique/pages.py @@ -30,13 +30,42 @@ __all__ = ['AjaxPage', 'EventPage', 'JsonResumePage'] class Channel(Filter): + + CHANNELS_PARAM = { + 'einst-3 elgr-data-logo': u'Action', + 'einst-8 elgr-data-logo': u'Canal+ Décalé', + 'einst-9 elgr-data-logo': u'Canal+ Family', + 'einst-12 elgr-data-logo': u'Ciné FX', + 'einst-13 elgr-data-logo': u'Polar', + 'einst-14 elgr-data-logo': u'Ciné+ Classic', + 'einst-15 elgr-data-logo': u'Ciné+ Club', + 'einst-16 elgr-data-logo': u'Ciné+ Emotion', + 'einst-17 elgr-data-logo': u'Ciné+ Famiz', + 'einst-18 elgr-data-logo': u'Ciné+ Frisson', + 'einst-19 elgr-data-logo': u'Ciné+ Premier', + 'einst-21 elgr-data-logo': u'Comédie+', + 'einst-24 elgr-data-logo': u'Disney Channel', + 'einst-25 elgr-data-logo': u'Disney Cinemagic', + 'einst-34 elgr-data-logo': u'Jimmy', + 'einst-37 elgr-data-logo': u'MCM', + 'einst-41 elgr-data-logo': u'OCS Géants', + 'einst-42 elgr-data-logo': u'OCS Choc', + 'einst-44 elgr-data-logo': u'OCS Max', + 'einst-45 elgr-data-logo': u'OCS City', + 'einst-49 elgr-data-logo': u'RTL 9', + 'einst-52 elgr-data-logo': u'TCM Cinéma', + 'einst-54 elgr-data-logo': u'Teva', + 'einst-59 elgr-data-logo': u'TV Breizh', + 'einst-4055 elgr-data-logo': u'Paramount Channel', + } + def filter(self, el): channel_info = el[0].xpath('div/div[@class="elgr-data-channel"]') if channel_info: channel = CleanText('.')(channel_info[0]) else: channel_info = Attr('div[@class="elgr-product-data"]/span', 'class')(el[0]) - channel = self.page.CHANNELS_PARAM.get(channel_info) + channel = self.CHANNELS_PARAM.get(channel_info) return channel @@ -70,33 +99,6 @@ class FormatDate(Filter): class AjaxPage(HTMLPage): - CHANNELS_PARAM = { - 'einst-3 elgr-data-logo': u'Action', - 'einst-8 elgr-data-logo': u'Canal+ Décalé', - 'einst-9 elgr-data-logo': u'Canal+ Family', - 'einst-12 elgr-data-logo': u'Ciné FX', - 'einst-13 elgr-data-logo': u'Polar', - 'einst-14 elgr-data-logo': u'Ciné+ Classic', - 'einst-15 elgr-data-logo': u'Ciné+ Club', - 'einst-16 elgr-data-logo': u'Ciné+ Emotion', - 'einst-17 elgr-data-logo': u'Ciné+ Famiz', - 'einst-18 elgr-data-logo': u'Ciné+ Frisson', - 'einst-19 elgr-data-logo': u'Ciné+ Premier', - 'einst-21 elgr-data-logo': u'Comédie+', - 'einst-24 elgr-data-logo': u'Disney Channel', - 'einst-25 elgr-data-logo': u'Disney Cinemagic', - 'einst-34 elgr-data-logo': u'Jimmy', - 'einst-37 elgr-data-logo': u'MCM', - 'einst-41 elgr-data-logo': u'OCS Géants', - 'einst-42 elgr-data-logo': u'OCS Choc', - 'einst-44 elgr-data-logo': u'OCS Max', - 'einst-45 elgr-data-logo': u'OCS City', - 'einst-49 elgr-data-logo': u'RTL 9', - 'einst-52 elgr-data-logo': u'TCM Cinéma', - 'einst-54 elgr-data-logo': u'Teva', - 'einst-59 elgr-data-logo': u'TV Breizh', - 'einst-4055 elgr-data-logo': u'Paramount Channel', - } def count_events(self): return len(self.doc.xpath("//a"))