[senscritique] fix bug in network selection
This commit is contained in:
parent
04cec70e1f
commit
21e53d6837
2 changed files with 43 additions and 45 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue