[weboob] [PATCH 1/1] Add the french radio 'france inter'

Johann Broudin johann.broudin at 6-8.fr
Sat Apr 9 17:39:20 CEST 2011


Signed-off-by: Johann Broudin <johann.broudin at 6-8.fr>
---
 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(+), 0 deletions(-)
 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 0000000..1a64d7c
--- /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 <http://www.gnu.org/licenses/>.
+
+
+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 0000000..825d0d7
--- /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 <http://www.gnu.org/licenses/>.
+
+
+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 at 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 0000000..0e28ec5
--- /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 <http://www.gnu.org/licenses/>.
+
+
+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 0000000..911e199
--- /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 <http://www.gnu.org/licenses/>.
+
+
+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()
-- 
1.7.4.1



More information about the weboob mailing list