[senscritique] fix bug in network selection

This commit is contained in:
Bezleputh 2014-06-06 11:55:42 +02:00
commit 21e53d6837
2 changed files with 43 additions and 45 deletions

View file

@ -17,8 +17,7 @@
# 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.browser2 import PagesBrowser, URL, Profile, Firefox from weboob.tools.browser2 import PagesBrowser, URL, Firefox
from .calendar import SensCritiquenCalendarEvent from .calendar import SensCritiquenCalendarEvent
from .pages import AjaxPage, EventPage, JsonResumePage from .pages import AjaxPage, EventPage, JsonResumePage
@ -28,9 +27,10 @@ from lxml.etree import XMLSyntaxError
__all__ = ['SenscritiqueBrowser'] __all__ = ['SenscritiqueBrowser']
class SensCritiqueAjaxProfile(Profile): class SenscritiqueBrowser(PagesBrowser):
def setup_session(self, session):
session.headers.update({"User-Agent": "Mozilla/5.0 (Windows; U; Windows " 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" "NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
" GTB7.1 (.NET CLR 3.5.30729)", " GTB7.1 (.NET CLR 3.5.30729)",
"Accept": "text/html, */*; q=0.01", "Accept": "text/html, */*; q=0.01",
@ -41,18 +41,14 @@ class SensCritiqueAjaxProfile(Profile):
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
}) })
def set_json_header(self):
class SensCritiqueJsonProfile(Profile): self.session.headers.update({"User-Agent": "Mozilla/5.0 (Windows; U; Windows "
def setup_session(self, session):
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" "NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
" GTB7.1 (.NET CLR 3.5.30729)", " GTB7.1 (.NET CLR 3.5.30729)",
"Accept": "application/json, text/javascript, */*; q=0.01", "Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest", "X-Requested-With": "XMLHttpRequest",
}) })
class SenscritiqueBrowser(PagesBrowser):
ENCODING = 'utf-8' ENCODING = 'utf-8'
BASEURL = 'http://www.senscritique.com' BASEURL = 'http://www.senscritique.com'
@ -74,9 +70,9 @@ 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'
params = {'network': package} #do not use a dict because there are several same keys
for channel in channels: params = "network=%s" % package
params['channels[]'] = channel params += ''.join(["&channels%%5B%%5D=%d" % (channel) for channel in channels])
self.open(url, data=params) self.open(url, data=params)
def list_events(self, date_from, date_to=None, package=None, channels=None): def list_events(self, date_from, date_to=None, package=None, channels=None):
@ -84,10 +80,10 @@ class SenscritiqueBrowser(PagesBrowser):
self.program_page.go() self.program_page.go()
page_nb = 1 page_nb = 1
self.set_ajax_header()
if package and channels: if package and channels:
self.set_package_settings(package, channels) self.set_package_settings(package, channels)
self._setup_session(SensCritiqueAjaxProfile())
while True: while True:
try: try:
self.DATA['page'] = '%d' % page_nb self.DATA['page'] = '%d' % page_nb
@ -111,7 +107,7 @@ class SenscritiqueBrowser(PagesBrowser):
self.program_page.go() self.program_page.go()
page_nb = 1 page_nb = 1
self._setup_session(SensCritiqueAjaxProfile()) self.set_ajax_header()
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)
@ -134,7 +130,7 @@ class SenscritiqueBrowser(PagesBrowser):
return event return event
def get_resume(self, _id): def get_resume(self, _id):
self._setup_session(SensCritiqueJsonProfile()) 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) a_id = re_id.search(_id.split('#')[0]).group(1)
return self.json_page.go(_id=a_id).get_resume() return self.json_page.go(_id=a_id).get_resume()

View file

@ -30,13 +30,42 @@ __all__ = ['AjaxPage', 'EventPage', 'JsonResumePage']
class Channel(Filter): 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): def filter(self, el):
channel_info = el[0].xpath('div/div[@class="elgr-data-channel"]') channel_info = el[0].xpath('div/div[@class="elgr-data-channel"]')
if channel_info: if channel_info:
channel = CleanText('.')(channel_info[0]) channel = CleanText('.')(channel_info[0])
else: else:
channel_info = Attr('div[@class="elgr-product-data"]/span', 'class')(el[0]) 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 return channel
@ -70,33 +99,6 @@ class FormatDate(Filter):
class AjaxPage(HTMLPage): 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): def count_events(self):
return len(self.doc.xpath("//a")) return len(self.doc.xpath("//a"))