[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
# 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 .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()

View file

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