From c84672b0d5901715c2e29edad0f1da7d5e265d49 Mon Sep 17 00:00:00 2001 From: Johann Broudin Date: Sat, 9 Apr 2011 17:36:32 +0200 Subject: [PATCH] Add the french radio 'france inter' --- weboob/backends/franceinter/__init__.py | 25 ++++++++ weboob/backends/franceinter/backend.py | 78 +++++++++++++++++++++++++ weboob/backends/franceinter/browser.py | 37 ++++++++++++ weboob/backends/franceinter/pages.py | 38 ++++++++++++ 4 files changed, 178 insertions(+) create mode 100644 weboob/backends/franceinter/__init__.py create mode 100644 weboob/backends/franceinter/backend.py create mode 100644 weboob/backends/franceinter/browser.py create mode 100644 weboob/backends/franceinter/pages.py diff --git a/weboob/backends/franceinter/__init__.py b/weboob/backends/franceinter/__init__.py new file mode 100644 index 00000000..1a64d7ca --- /dev/null +++ b/weboob/backends/franceinter/__init__.py @@ -0,0 +1,25 @@ +# * -*- coding: utf-8 -*- + +# Copyright(C) 2011 Johann Broudin +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from .backend import franceinterBackend + + +__all__ = ['franceinterBackend'] + diff --git a/weboob/backends/franceinter/backend.py b/weboob/backends/franceinter/backend.py new file mode 100644 index 00000000..825d0d7a --- /dev/null +++ b/weboob/backends/franceinter/backend.py @@ -0,0 +1,78 @@ +# * -*- coding: utf-8 -*- + +# Copyright(C) 2011 Johann Broudin +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.capabilities.radio import ICapRadio, Radio, Stream, Emission +from weboob.tools.backend import BaseBackend +from .browser import franceinterBrowser + + +__all__ = ['franceinterBackend'] + + +class franceinterBackend(BaseBackend, ICapRadio): + NAME = 'franceinter' + MAINTAINER = 'Johann Broudin' + EMAIL = 'johann.broudin@6-8.fr' + VERSION = '1' + DESCRIPTION = u'The france inter french radio' + LICENCE = 'AGPLv3' + BROWSER = franceinterBrowser + + _RADIOS = {'france inter': (u'france inter', u'france inter', u'http://mp3.live.tv-radio.com/franceinter/all/franceinterhautdebit.mp3')} + + def iter_radios(self): + for id in self._RADIOS.iterkeys(): + yield self.get_radio(id) + + def iter_radios_search(self, pattern): + for radio in self.iter_radios(): + if pattern in radio.title or pattern in radio.description: + yield radio + + def get_radio(self, radio): + if not isinstance(radio, Radio): + radio = Radio(radio) + + if not radio.id in self._RADIOS: + return None + + title, description, url = self._RADIOS[radio.id] + radio.title = title + radio.description = description + + emission = self.browser.get_current(radio.id) + current = Emission(0) + current.artist = emission + radio.current = current + + stream = Stream(0) + stream.title = u'128kbits/s' + stream.url = url + radio.streams = [stream] + return radio + + def fill_radio(self, radio, fields): + if 'current' in fields: + if not radio.current: + radio.current = Emission(0) + radio.current.artist, radio.current.title = self.browser.get_current(radio.id) + return radio + + OBJECTS = {Radio: fill_radio} diff --git a/weboob/backends/franceinter/browser.py b/weboob/backends/franceinter/browser.py new file mode 100644 index 00000000..0e28ec5d --- /dev/null +++ b/weboob/backends/franceinter/browser.py @@ -0,0 +1,37 @@ +# * -*- coding: utf-8 -*- + +# Copyright(C) 2011 Johann Broudin +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.tools.browser import BaseBrowser + +from .pages import XMLinfos + + +__all__ = ['franceinterBrowser'] + + +class franceinterBrowser(BaseBrowser): + DOMAIN = u'metadatas.tv-radio.com' + PAGES = {r'.*metadatas/franceinterRSS\.xml': XMLinfos} + + def get_current(self, radio): + self.location('/metadatas/franceinterRSS.xml') + assert self.is_on_page(XMLinfos) + + return self.page.get_current() diff --git a/weboob/backends/franceinter/pages.py b/weboob/backends/franceinter/pages.py new file mode 100644 index 00000000..911e1990 --- /dev/null +++ b/weboob/backends/franceinter/pages.py @@ -0,0 +1,38 @@ +# * -*- coding: utf-8 -*- + +# Copyright(C) 2011 Johann Broudin +# +# This file is part of weboob. +# +# weboob is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# weboob is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with weboob. If not, see . + + +from weboob.tools.browser import BasePage + + + +__all__ = ['XMLinfos'] + + +class XMLinfos(BasePage): + def get_current(self): + try: + for channel in self.parser.select(self.document.getroot(), 'channel'): + emission = channel.find('item/song_title').text + #artist = channel.find('item/artist_name').text + except AttributeError: + emission = "Not defined" + # artist = "Not defined" + + return unicode(emission).strip()