diff --git a/modules/radiofrance/browser.py b/modules/radiofrance/browser.py index 69944a50..911d93bb 100644 --- a/modules/radiofrance/browser.py +++ b/modules/radiofrance/browser.py @@ -25,17 +25,24 @@ __all__ = ['RadioFranceBrowser'] class RadioFranceBrowser(PagesBrowser): json_page = URL('sites/default/files/(?P.*).json', - 'player-json/reecoute/(?P.*)', JsonPage) + 'player-json/reecoute/(?P.*)', + 'station/(?P.*)', JsonPage) podcast_page = URL('podcast09/rss_(?P.*)\.xml', PodcastPage) radio_page = URL('(?P.*)', RadioPage) def get_radio_url(self, radio, player): self.BASEURL = 'http://www.%s.fr/' % radio - return self.radio_page.go(page=player).get_url() + if radio == 'francebleu': + return self.json_page.go(fbplayer=player).get_fburl() + else: + return self.radio_page.go(page=player).get_url() - def get_current(self, radio, json_url): + def get_current(self, radio, url): self.BASEURL = 'http://www.%s.fr/' % radio - return self.json_page.go(json_url=json_url).get_current() + if radio == 'francebleu': + return self.radio_page.go(page=url).get_current() + else: + return self.json_page.go(json_url=url).get_current() def get_selection(self, radio_url, json_url, radio_id): self.BASEURL = 'http://www.%s.fr/' % radio_url diff --git a/modules/radiofrance/module.py b/modules/radiofrance/module.py index 99d913d4..842eaa5e 100644 --- a/modules/radiofrance/module.py +++ b/modules/radiofrance/module.py @@ -61,9 +61,8 @@ class RadioFranceModule(Module, CapRadio, CapCollection, CapAudio): u'podcast': u'programmes-chroniques/podcasts', u'selection': u'lecteur_commun_json/reecoute-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, 'fbidf': {u'title': u'France Bleu Île-de-France (Paris)', - u'player': u'player/france-bleu-107-1', - u'live': u'lecteur_commun_json/timeline-9753', - u'selection': u'lecteur_commun_json/reecoute-9753-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'107-1', + u'live': u'grid/107-1'}, 'fipradio': {u'title': u'FIP', u'player': u'player', u'live': 'import_si/si_titre_antenne/FIP_player_current', @@ -79,181 +78,137 @@ class RadioFranceModule(Module, CapRadio, CapCollection, CapAudio): u'podcast': u'podcasts', u'selection': u'lecteur_commun_json/reecoute-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, 'fbalsace': {u'title': u'France Bleu Alsace (Strasbourg)', - u'player': u'player/station/france-bleu-alsace', - u'live': u'lecteur_commun_json/timeline-13085', - u'selection': u'lecteur_commun_json/reecoute-13085-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'alsace', + u'live': u'grid/alsace'}, 'fbarmorique': {u'title': u'France Bleu Armorique (Rennes)', - u'player': u'player/station/france-bleu-armorique', - u'live': u'lecteur_commun_json/timeline-13087', - u'selection': u'lecteur_commun_json/reecoute-13087-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'armorique', + u'live': u'grid/armorique'}, 'fbauxerre': {u'title': u'France Bleu Auxerre', - u'player': u'player/station/france-bleu-auxerre', - u'live': u'lecteur_commun_json/timeline-11219', - u'selection': u'lecteur_commun_json/reecoute-11219-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'auxerre', + u'live': u'grid/auxerre'}, 'fbazur': {u'title': u'France Bleu Azur (Nice)', - u'player': u'player/station/france-bleu-azur', - u'live': u'lecteur_commun_json/timeline-13089', - u'selection': u'lecteur_commun_json/reecoute-13089-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'azur', + u'live': u'grid/azur'}, 'fbbassenormandie': {u'title': u'France Bleu Basse Normandie (Caen)', - u'player': u'player/station/france-bleu-bassenormandie', - u'live': u'lecteur_commun_json/timeline-13091', - u'selection': u'lecteur_commun_json/reecoute-13091-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'basse-normandie', + u'live': u'grid/basse-normandie'}, 'fbbearn': {u'title': u'France Bleu Bearn (Pau)', - u'player': u'player/station/france-bleu-bearn', - u'live': u'lecteur_commun_json/timeline-13093', - u'selection': u'lecteur_commun_json/reecoute-13093-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'bearn', + u'live': u'grid/bearn'}, 'fbbelfort': {u'title': u'France Bleu Belfort', - u'player': u'player/station/france-bleu-belfort', - u'live': u'lecteur_commun_json/timeline-13095', - u'selection': u'lecteur_commun_json/reecoute-13095-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'belfort-montbeliard', + u'live': u'grid/belfort-montbeliard'}, 'fbberry': {u'title': u'France Bleu Berry (Châteauroux)', - u'player': u'player/station/france-bleu-berry', - u'live': u'lecteur_commun_json/timeline-11223', - u'selection': u'lecteur_commun_json/reecoute-11223-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'berry', + u'live': u'grid/berry'}, 'fbbesancon': {u'title': u'France Bleu Besancon', - u'player': u'player/station/france-bleu-besancon', - u'live': u'lecteur_commun_json/timeline-13097', - u'selection': u'lecteur_commun_json/reecoute-13097-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'besancon', + u'live': u'grid/besancon'}, 'fbbourgogne': {u'title': u'France Bleu Bourgogne (Dijon)', - u'player': u'player/station/france-bleu-bourgogne', - u'live': u'lecteur_commun_json/timeline-13099', - u'selection': u'lecteur_commun_json/reecoute-13099-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, - 'fbbreizizel': {u'title': u'France Bleu Breiz Izel (Quimper)', - u'player': u'player/station/france-bleu-breizizel', - u'live': u'lecteur_commun_json/timeline-13101', - u'selection': u'lecteur_commun_json/reecoute-13101-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'bourgogne', + u'live': u'grid/bourgogne'}, + 'fbbreihzizel': {u'title': u'France Bleu Breizh Izel (Quimper)', + u'player': u'breizh-izel', + u'live': u'grid/breizh-izel'}, 'fbchampagne': {u'title': u'France Bleu Champagne (Reims)', - u'player': u'player/station/france-bleu-champagne', - u'live': u'lecteur_commun_json/timeline-13103', - u'selection': u'lecteur_commun_json/reecoute-13103-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'champagne-ardenne', + u'live': u'grid/champagne-ardenne'}, 'fbcotentin': {u'title': u'France Bleu Cotentin (Cherbourg)', - u'player': u'player/station/france-bleu-cotentin', - u'live': u'lecteur_commun_json/timeline-13105', - u'selection': u'lecteur_commun_json/reecoute-13105-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'cotentin', + u'live': u'grid/cotentin'}, 'fbcreuse': {u'title': u'France Bleu Creuse (Gueret)', - u'player': u'player/station/france-bleu-creuse', - u'live': u'lecteur_commun_json/timeline-13107', - u'selection': u'lecteur_commun_json/reecoute-13107-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'creuse', + u'live': u'grid/creuse'}, 'fbdromeardeche': {u'title': u'France Bleu Drome Ardeche (Valence)', - u'player': u'player/station/france-bleu-dromeardeche', - u'live': u'lecteur_commun_json/timeline-13109', - u'selection': u'lecteur_commun_json/reecoute-13109-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'drome-ardeche', + u'live': u'grid/drome-ardeche'}, 'fbelsass': {u'title': u'France Bleu Elsass', - u'player': 'player/station/france-bleu-elsass', - u'live': u'lecteur_commun_json/timeline-19370', - u'selection': u'lecteur_commun_json/reecoute-19370-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': 'elsass', + u'live': u'grid/elsass'}, 'fbgardlozere': {u'title': u'France Bleu Gard Lozère (Nîmes)', - u'player': u'player/station/france-bleu-gardlozere', - u'live': u'lecteur_commun_json/timeline-13111', - u'selection': u'lecteur_commun_json/reecoute-13111-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'gard-lozere', + u'live': u'grid/gard-lozere'}, 'fbgascogne': {u'title': u'France Bleu Gascogne (Mont-de-Marsan)', - u'player': u'player/station/france-bleu-gascogne', - u'live': u'lecteur_commun_json/timeline-13113', - u'selection': u'lecteur_commun_json/reecoute-13113-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'gascogne', + u'live': u'grid/gascogne'}, 'fbgironde': {u'title': u'France Bleu Gironde (Bordeaux)', - u'player': u'player/station/france-bleu-gironde', - u'live': u'lecteur_commun_json/timeline-13115', - u'selection': u'lecteur_commun_json/reecoute-13115-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'gironde', + u'live': u'grid/gironde'}, 'fbhautenormandie': {u'title': u'France Bleu Haute Normandie (Rouen)', - u'player': u'player/station/france-bleu-hautenormandie', - u'live': u'lecteur_commun_json/timeline-13117', - u'selection': u'lecteur_commun_json/reecoute-13117-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'haute-normandie', + u'live': u'grid/haute-normandie'}, 'fbherault': {u'title': u'France Bleu Hérault (Montpellier)', - u'player': u'player/station/france-bleu-herault', - u'live': u'lecteur_commun_json/timeline-11231', - u'selection': u'lecteur_commun_json/reecoute-11231-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'herault', + u'live': u'grid/herault'}, 'fbisere': {u'title': u'France Bleu Isère (Grenoble)', - u'player': u'player/station/france-bleu-isere', - u'live': u'lecteur_commun_json/timeline-13119', - u'selection': u'lecteur_commun_json/reecoute-13119-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'isere', + u'live': u'grid/isere'}, 'fblarochelle': {u'title': u'France Bleu La Rochelle', - u'player': u'player/station/france-bleu-larochelle', - u'live': u'lecteur_commun_json/timeline-13121', - u'selection': u'lecteur_commun_json/reecoute-13121-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'la-rochelle', + u'live': u'grid/la-rochelle'}, 'fblimousin': {u'title': u'France Bleu Limousin (Limoges)', - u'player': u'player/station/france-bleu-limousin', - u'live': u'lecteur_commun_json/timeline-13123', - u'selection': u'lecteur_commun_json/reecoute-13123-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'limousin', + u'live': u'grid/limousin'}, 'fbloireocean': {u'title': u'France Bleu Loire Océan (Nantes)', - u'player': u'player/station/france-bleu-loireocean', - u'live': u'lecteur_commun_json/timeline-13125', - u'selection': u'lecteur_commun_json/reecoute-13125-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'loire-ocean', + u'live': u'grid/loire-ocean'}, 'fblorrainenord': {u'title': u'France Bleu Lorraine Nord (Metz)', - u'player': u'player/station/france-bleu-lorrainenord', - u'live': u'lecteur_commun_json/timeline-13127', - u'selection': u'lecteur_commun_json/reecoute-13127-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'lorraine-nord', + u'live': u'grid/lorraine-nord'}, 'fbmaine': {u'title': u'France Bleu Maine', - u'player': 'player/station/france-bleu-maine', - u'live': u'lecteur_commun_json/timeline-13129', - u'selection': u'lecteur_commun_json/reecoute-13129-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': 'maine', + u'live': u'grid/maine'}, 'fbmayenne': {u'title': u'France Bleu Mayenne (Laval)', - u'player': u'player/station/france-bleu-mayenne', - u'live': u'lecteur_commun_json/timeline-13131', - u'selection': u'lecteur_commun_json/reecoute-13131-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'mayenne', + u'live': u'grid/mayenne'}, 'fbnord': {u'title': u'France Bleu Nord (Lille)', - u'player': u'player/station/france-bleu-nord', - u'live': u'lecteur_commun_json/timeline-11235', - u'selection': u'lecteur_commun_json/reecoute-11235-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'nord', + u'live': u'grid/nord'}, 'fborleans': {u'title': u'France Bleu Orléans', - u'player': u'player/station/france-bleu-orleans', - u'live': u'lecteur_commun_json/timeline-13133', - u'selection': u'lecteur_commun_json/reecoute-13133-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'orleans', + u'live': u'grid/orleans'}, 'fbpaysbasque': {u'title': u'France Bleu Pays Basque (Bayonne)', - u'player': u'player/station/france-bleu-paysbasque', - u'live': u'lecteur_commun_json/timeline-13135', - u'selection': u'lecteur_commun_json/reecoute-13135-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'pays-basque', + u'live': u'grid/pays-basque'}, 'fbpaysdauvergne': {u'title': u'France Bleu Pays d\'Auvergne (Clermont-Ferrand)', - u'player': u'player/station/france-bleu-paysdauvergne', - u'live': u'lecteur_commun_json/timeline-11237', - u'selection': u'lecteur_commun_json/reecoute-11237-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'pays-d-auvergne', + u'live': u'grid/pays-d-auvergne'}, 'fbpaysdesavoie': {u'title': u'France Bleu Pays de Savoie (Chambery)', - u'player': u'player/station/france-bleu-paysdesavoie', - u'live': u'lecteur_commun_json/timeline-11239', - u'selection': u'lecteur_commun_json/reecoute-11239-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'pays-de-savoie', + u'live': u'grid/pays-de-savoie'}, 'fbperigord': {u'title': u'France Bleu Périgord (Périgueux)', - u'player': u'player/station/france-bleu-perigord', - u'live': u'lecteur_commun_json/timeline-13137', - u'selection': u'lecteur_commun_json/reecoute-13137-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'perigord', + u'live': u'grid/perigord'}, 'fbpicardie': {u'title': u'France Bleu Picardie (Amiens)', - u'player': u'player/station/france-bleu-picardie', - u'live': u'lecteur_commun_json/timeline-13139', - u'selection': u'lecteur_commun_json/reecoute-13139-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'picardie', + u'live': u'grid/picardie'}, 'fbpoitou': {u'title': u'France Bleu Poitou (Poitiers)', - u'player': u'player/station/france-bleu-poitou', - u'live': u'lecteur_commun_json/timeline-13141', - u'selection': u'lecteur_commun_json/reecoute-13141-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'poitou', + u'live': u'grid/poitou'}, 'fbprovence': {u'title': u'France Bleu Provence (Aix-en-Provence)', - u'player': u'player/station/france-bleu-provence', - u'live': u'lecteur_commun_json/timeline-11241', - u'selection': u'lecteur_commun_json/reecoute-11241-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'provence', + u'live': u'grid/provence'}, 'fbrcfm': {u'title': u'France Bleu RCFM', - u'player': u'player/station/france-bleu-rcfm', - u'live': u'lecteur_commun_json/timeline-13143', - u'selection': u'lecteur_commun_json/reecoute-13143-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'rcfm', + u'live': u'grid/rcfm'}, 'fbsaintetienneloire': {u'title': u'France Bleu Saint-Etienne Loire', - u'player': u'player/station/france-bleu-saint-etienne-loire', - u'live': u'lecteur_commun_json/timeline-60434', - u'selection': u'lecteur_commun_json/reecoute-60434-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'saint-etienne-loire', + u'live': u'grid/saint-etienne-loire'}, 'fbroussillon': {u'title': u'France Bleu Roussillon', - u'player': u'player/station/france-bleu-roussillon', - u'live': u'lecteur_commun_json/timeline-11243', - u'selection': u'lecteur_commun_json/reecoute-11243-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'roussillon', + u'live': u'grid/roussillon'}, 'fbsudlorraine': {u'title': u'France Bleu Sud Lorraine (Nancy)', - u'player': u'player/station/france-bleu-sudlorraine', - u'live': u'lecteur_commun_json/timeline-13145', - u'selection': u'lecteur_commun_json/reecoute-13145-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'sud-lorraine', + u'live': u'grid/sud-lorraine'}, 'fbtoulouse': {u'title': u'France Bleu Toulouse', - u'player': u'player/station/france-bleu-toulouse', - u'live': u'lecteur_commun_json/timeline-13147', - u'selection': u'lecteur_commun_json/reecoute-13147-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'toulouse', + u'live': u'grid/toulouse'}, 'fbtouraine': {u'title': u'France Bleu Touraine (Tours)', - u'player': u'player/station/france-bleu-touraine', - u'live': u'lecteur_commun_json/timeline-13149', - u'selection': u'lecteur_commun_json/reecoute-13149-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'touraine', + u'live': u'grid/touraine'}, 'fbvaucluse': {u'title': u'France Bleu Vaucluse (Avignon)', - u'player': u'player/station/france-bleu-vaucluse', - u'live': u'lecteur_commun_json/timeline-13151', - u'selection': u'lecteur_commun_json/reecoute-13151-%s' % int(time.mktime(datetime.now().replace(hour=14, minute=0, second=0).timetuple()))}, + u'player': u'vaucluse', + u'live': u'grid/vaucluse'}, } def iter_resources(self, objs, split_path): @@ -272,6 +227,7 @@ class RadioFranceModule(Module, CapRadio, CapCollection, CapAudio): elif len(split_path) > 1 and split_path[1] in self._RADIOS: if len(split_path) == 2: yield Collection([split_path[0], u'direct'], u'Direct') + if 'selection' in self._RADIOS[split_path[1]]: yield Collection([split_path[0], u'selection'], u'Selection') elif len(split_path) == 3 and split_path[2] == 'selection': @@ -287,17 +243,19 @@ class RadioFranceModule(Module, CapRadio, CapCollection, CapAudio): elif len(split_path) == 1: yield Collection([split_path[0], u'direct'], u'Direct') - yield Collection([split_path[0], u'selection'], u'Selection') + if 'selection' in self._RADIOS[split_path[0]]: + yield Collection([split_path[0], u'selection'], u'Selection') if 'podcast' in self._RADIOS[split_path[0]]: yield Collection([split_path[0], u'podcasts'], u'Podcast') elif len(split_path) == 2 and split_path[1] == 'selection': for _id, item in sorted(self._RADIOS.iteritems()): if _id == split_path[0]: - selection_url = self._RADIOS[_id]['selection'] - for item in self.browser.get_selection(_id, selection_url, _id): - yield item - break + if 'selection' in self._RADIOS[_id]: + selection_url = self._RADIOS[_id]['selection'] + for item in self.browser.get_selection(_id, selection_url, _id): + yield item + break elif len(split_path) == 2 and split_path[1] == 'podcasts': for item in self.browser.get_podcast_emissions(split_path[0], @@ -353,9 +311,9 @@ class RadioFranceModule(Module, CapRadio, CapCollection, CapAudio): def fill_radio(self, radio, fields): if 'current' in fields: title = self._RADIOS[radio.id]['title'] - json_url = self._RADIOS[radio.id]['live'] + live_url = self._RADIOS[radio.id]['live'] radio_name = radio.id if not radio.id.startswith('fb') else 'francebleu' - artist, title = self.browser.get_current(radio_name, json_url) + artist, title = self.browser.get_current(radio_name, live_url) if not radio.current or radio.current is NotLoaded: radio.current = StreamInfo(0) radio.current.what = title @@ -375,17 +333,19 @@ class RadioFranceModule(Module, CapRadio, CapCollection, CapAudio): def search_audio(self, pattern, sortby=CapAudio.SEARCH_RELEVANCE): for radio in self._RADIOS: - selection_url = self._RADIOS[radio]['selection'] - radio_url = radio if not radio.startswith('fb') else 'francebleu' - for item in self.browser.search_audio(pattern, radio_url, selection_url, radio): - yield item + if 'selection' in self._RADIOS[radio]: + selection_url = self._RADIOS[radio]['selection'] + radio_url = radio if not radio.startswith('fb') else 'francebleu' + for item in self.browser.search_audio(pattern, radio_url, selection_url, radio): + yield item def get_audio(self, _id): radio = self.get_radio_id(_id) if radio in self._RADIOS: - selection_url = self._RADIOS[radio]['selection'] - radio_url = radio if not radio.startswith('fb') else 'francebleu' - return self.browser.get_audio(_id, radio_url, selection_url, radio) + if 'selection' in self._RADIOS[radio]: + selection_url = self._RADIOS[radio]['selection'] + radio_url = radio if not radio.startswith('fb') else 'francebleu' + return self.browser.get_audio(_id, radio_url, selection_url, radio) elif radio == 'podcast': m = re.match('audio\.podcast\.(\d*)-.*', _id) if m: diff --git a/modules/radiofrance/pages.py b/modules/radiofrance/pages.py index 3635ab45..d9d4e37e 100644 --- a/modules/radiofrance/pages.py +++ b/modules/radiofrance/pages.py @@ -20,14 +20,14 @@ from weboob.browser.elements import ItemElement, DictElement, ListElement, method from weboob.browser.pages import HTMLPage, JsonPage, XMLPage from weboob.browser.filters.json import Dict -from weboob.browser.filters.standard import Format, CleanText, Join, Env, Regexp, Duration +from weboob.browser.filters.standard import Format, CleanText, Join, Env, Regexp, Duration, Time from weboob.capabilities.audio import BaseAudio from weboob.tools.capabilities.audio.audio import BaseAudioIdFilter from weboob.capabilities.image import BaseImage from weboob.capabilities.collection import Collection import time -from datetime import timedelta +from datetime import timedelta, datetime, date class PodcastPage(XMLPage): @@ -64,7 +64,10 @@ class PodcastPage(XMLPage): class RadioPage(HTMLPage): def get_url(self): - return CleanText('//a[@id="player"][1]/@href')(self.doc) + url = Regexp(CleanText('//script'), '.*liveUrl: \'(.*)\', timeshiftUrl.*', default=None)(self.doc) + if not url: + url = CleanText('//a[@id="player"][1]/@href')(self.doc) + return url def get_france_culture_podcasts_url(self): return Regexp(CleanText('//a[@class="lien-rss"][1]/@href'), @@ -176,6 +179,20 @@ class RadioPage(HTMLPage): 'http://radiofrance-podcast.net/podcast09/rss_(.*).xml') obj_title = CleanText('./h2/a') + def get_current(self): + now = datetime.now() + today = date.today() + + emission_title = u'' + for el in self.doc.xpath('//li[@class="chronique clear"]'): + emission_time = Time(CleanText('./div[@class="quand"]', + replace=[(u'à', '')]))(el) + emission_datetime = datetime.combine(today, emission_time) + if emission_datetime > now: + return u'', emission_title + emission_title = CleanText('./h3[@class="titre"]')(el) + return u'', u'' + class JsonPage(JsonPage): @method @@ -222,7 +239,8 @@ class JsonPage(JsonPage): now = int(time.time()) for item in self.doc['diffusions']: if item['debut'] < now and item['fin'] > now: - title = u'%s: %s' % (item['title_emission'], item['title_diff']) + title = u'%s: %s' % (item['title_emission'], + item['title_diff'] if 'title_diff' in item else '') person = u'' return person, title return u'', u'' @@ -243,3 +261,8 @@ class JsonPage(JsonPage): person = u','.join(item['personnes']) return person, title return u'', u'' + + def get_fburl(self): + for el in self.doc['url']: + if el['type'] == 'live' and el['bitrate'] == 128: + return Dict('url')(el) diff --git a/modules/radiofrance/test.py b/modules/radiofrance/test.py index cd644214..7b0a0918 100644 --- a/modules/radiofrance/test.py +++ b/modules/radiofrance/test.py @@ -47,12 +47,17 @@ class RadioFranceTest(BackendTest): streams = self.backend.get_radio(radio.split_path[-1]).streams self.assertTrue(len(streams) > 0) - l_sel = list(self.backend.iter_resources(objs=[BaseAudio], - split_path=['francebleu', - radio.split_path[-1], - 'selection'])) - if len(l_sel) > 0: - self.assertTrue(len(l_sel[0].url) > 0) + l_sel1 = list(self.backend.iter_resources(objs=[BaseAudio], + split_path=['francebleu', + radio.split_path[-1]])) + + if 'Selection' in [el.title for el in l_sel1]: + l_sel = list(self.backend.iter_resources(objs=[BaseAudio], + split_path=['francebleu', + radio.split_path[-1], + 'selection'])) + if len(l_sel) > 0: + self.assertTrue(len(l_sel[0].url) > 0) def test_podcasts(self): for key, item in self.backend._RADIOS.iteritems():