diff --git a/modules/difm/__init__.py b/modules/difm/__init__.py deleted file mode 100644 index add930c0..00000000 --- a/modules/difm/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2013 Roger Philibert -# -# 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 DIFMBackend - - -__all__ = ['DIFMBackend'] diff --git a/modules/difm/backend.py b/modules/difm/backend.py deleted file mode 100644 index a49d7aa4..00000000 --- a/modules/difm/backend.py +++ /dev/null @@ -1,141 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2013 Roger Philibert -# -# 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.capabilities.collection import ICapCollection -from weboob.tools.backend import BaseBackend -from weboob.tools.browser import StandardBrowser -from weboob.tools.misc import to_unicode - - -__all__ = ['DIFMBackend'] - - -class DIFMBackend(BaseBackend, ICapRadio, ICapCollection): - NAME = 'difm' - MAINTAINER = u'Roger Philibert' - EMAIL = 'roger.philibert@gmail.com' - VERSION = '0.h' - DESCRIPTION = u'Digitally Imported web radio' - LICENSE = 'AGPLv3+' - BROWSER = StandardBrowser - - # http://tobiass.eu/api - # http://mpd.wikia.com/wiki/Hack:di.fm-playlists - FORMATS = {('AAC', 64): 'public1', ('AAC', 32): 'public2', ('MP3', 96): 'public3', ('WMA', 40): 'public5'} - - def __init__(self, *a, **kw): - super(DIFMBackend, self).__init__(*a, **kw) - self.RADIOS = {} - - def _get_playlist_url(self, radio_key, format): - return 'http://listen.di.fm/%s/%s.pls' % (self.FORMATS[format], radio_key) - - def _get_info_url(self, radio_key): - self._fetch_radio_list() - - return 'http://api.audioaddict.com/v1/di/track_history/channel/%s' % self.RADIOS[radio_key]['id'] - - def create_default_browser(self): - return self.create_browser(parser='json') - - def _fetch_radio_list(self): - if not self.RADIOS: - document = self.browser.location('http://listen.di.fm/public3') - for info in document: - key = info['key'] - self.RADIOS[key] = {} - self.RADIOS[key]['id'] = info['id'] - self.RADIOS[key]['description'] = info['description'] - self.RADIOS[key]['name'] = info['name'] - - return self.RADIOS - - def iter_radios_search(self, pattern): - self._fetch_radio_list() - - pattern = pattern.lower() - for radio_key in self.RADIOS: - radio_dict = self.RADIOS[radio_key] - if pattern in radio_dict['name'].lower() or pattern in radio_dict['description'].lower(): - yield self.get_radio(radio_key) - - def iter_resources(self, objs, split_path): - self._fetch_radio_list() - - if Radio in objs: - self._restrict_level(split_path) - - for radio_key in self.RADIOS: - yield self.get_radio(radio_key) - - def get_current(self, radio_key): - document = self.browser.location(self._get_info_url(radio_key)) - - artist = title = 'Advertising' - for last in document: - if 'ad' in last: - continue - - artist = last.get('artist', '') or 'Unknown' - title = last.get('title', '') or 'Unknown' - - artist = to_unicode(artist.strip()) - title = to_unicode(title.strip()) - break - - return artist, title - - def get_radio(self, radio): - self._fetch_radio_list() - - if not isinstance(radio, Radio): - radio = Radio(radio) - - if not radio.id in self.RADIOS: - return None - - radio_dict = self.RADIOS[radio.id] - radio.title = radio_dict['name'] - radio.description = radio_dict['description'] - - artist, title = self.get_current(radio.id) - current = Emission(0) - current.artist = artist - current.title = title - radio.current = current - - radio.streams = [] - for stream_id, format in enumerate(self.FORMATS): - stream = Stream(stream_id) - stream.title = u'%s %skbps' % format - stream.url = self._get_playlist_url(radio.id, format) - radio.streams.append(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.get_current(radio.id) - return radio - - OBJECTS = {Radio: fill_radio} - diff --git a/modules/difm/favicon.png b/modules/difm/favicon.png deleted file mode 100644 index 38af0bb3..00000000 Binary files a/modules/difm/favicon.png and /dev/null differ diff --git a/modules/rockradio/__init__.py b/modules/rockradio/__init__.py deleted file mode 100644 index 2f71282f..00000000 --- a/modules/rockradio/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2013 Pierre Mazière -# -# 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 RockRadioBackend - - -__all__ = ['RockRadioBackend'] diff --git a/modules/rockradio/backend.py b/modules/rockradio/backend.py deleted file mode 100644 index 15f9462b..00000000 --- a/modules/rockradio/backend.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2013 Pierre Mazière -# -# Based on somafm backend -# -# 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.capabilities.collection import ICapCollection -from weboob.tools.backend import BaseBackend -from weboob.tools.browser import StandardBrowser - - -__all__ = ['RockRadioBackend'] - - -class RockRadioBackend(BaseBackend, ICapRadio, ICapCollection): - NAME = 'rockradio' - MAINTAINER = u'Pierre Mazière' - EMAIL = 'pierre.maziere@gmx.com' - VERSION = '0.h' - DESCRIPTION = u'Rock Music Internet Radio' - LICENSE = 'AGPLv3+' - BROWSER = StandardBrowser - - ALLINFO = 'http://www.rockradio.com' - # FIXME - # - # MPlayer does not like the pls file sent from this site. - - def _parse_current(self, data): - current = data.split(' - ') - if len(current) == 2: - return current - else: - return (u'Unknown', u'Unknown') - - def _fetch_radio_list(self): - radios = [] - - document = self.browser.location(self.ALLINFO) - for channel in document.iter('div'): - if ("shadow"!=channel.get('class')): - continue - url=u''+channel.find('a').get('href') - radio = Radio(url[(url.rfind('/')+1):].replace('.pls','')) - radio.title = u''+channel.getprevious().text - radio.description = u"" - - current_data = u"" - current = Emission(0) - current.artist, current.title = self._parse_current(current_data) - radio.current = current - - radio.streams = [] - stream_id = 0 - stream = Stream(stream_id) - stream.title = radio.title - stream.url = url - radio.streams.append(stream) - - radios.append(radio) - - return radios - - def iter_radios_search(self, pattern): - radios = self._fetch_radio_list() - - pattern = pattern.lower() - for radio in radios: - if pattern in radio.title.lower() or pattern in radio.description.lower(): - yield radio - - def iter_resources(self, objs, split_path): - radios = self._fetch_radio_list() - - if Radio in objs: - self._restrict_level(split_path) - - for radio in radios: - yield radio - - def get_radio(self, radio_id): - radios = self._fetch_radio_list() - for radio in radios: - if radio_id == radio.id: - 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.get_current(radio.id) - return radio - diff --git a/modules/rockradio/favicon.png b/modules/rockradio/favicon.png deleted file mode 100644 index 7273721b..00000000 Binary files a/modules/rockradio/favicon.png and /dev/null differ diff --git a/modules/rockradio/test.py b/modules/rockradio/test.py deleted file mode 100644 index 361f5a6b..00000000 --- a/modules/rockradio/test.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- - -# Copyright(C) 2013 Pierre Mazière -# -# 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.test import BackendTest -from weboob.capabilities.radio import Radio - - -class RockRadioTest(BackendTest): - BACKEND = 'rockradio' - - def test_rockradio(self): - ls = list(self.backend.iter_resources((Radio, ), [])) - self.assertTrue(len(ls) > 0) - - search = list(self.backend.iter_radios_search('classic')) - self.assertTrue(len(search) > 0) - self.assertTrue(len(search) < len(ls)) - - radio = self.backend.get_radio('classicrock') - self.assertTrue(radio.title) - self.assertFalse(radio.description) - self.assertTrue(radio.current.title) - self.assertTrue(radio.current.artist) - self.assertTrue(radio.streams[0].url) - self.assertTrue(radio.streams[0].title) -