Check-in [9f6a662093]
Overview
Comment: | Added login capability. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9f6a662093035418b3cd13693fce01df |
User & Date: | mario on 2016-11-01 15:55:18 |
Other Links: | manifest | tags |
Context
2016-11-01
| ||
16:02 | Reciva: added a more readable log.ERR() message for empty results. check-in: 66802cbdf6 user: mario tags: trunk | |
15:55 | Added login capability. check-in: 9f6a662093 user: mario tags: trunk | |
2016-10-31
| ||
21:52 | Python3 compatibility: can't use len() on TreeModelRow (Gtk3 doesn't return ListStore row). So use simpler but less exact try/except block to probe for our dict-ListStore and its pixbuf column. check-in: e667190902 user: mario tags: trunk | |
Changes
Modified contrib/reciva.py from [c50856b383] to [87b3a20dac].
1 2 3 4 5 | # encoding: UTF-8 # api: streamtuner2 # title: Reciva # url: https://radios.reciva.com/stations/genre/34?&start=100&count=50 # description: Home internet radio app and diverse station database. | | > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | # encoding: UTF-8 # api: streamtuner2 # title: Reciva # url: https://radios.reciva.com/stations/genre/34?&start=100&count=50 # description: Home internet radio app and diverse station database. # version: 0.3 # type: channel # category: radio # config: - # priority: contrib # png: # iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAGFBMVEXiMATfORfhQyTrZk7uh3Tzs6n10879+/iUjtOkAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAA # CxMBAJqcGAAAAAd0SU1FB+AEBw4nI8D7wUYAAACISURBVAjXDc09D4JAFETREcParl/UvKdoKxi1JgZoiYnQSiJua2ST+ftud3KLGZDvYteT4DRTifqAFCvVmPBRl6um # DsOWP1W5oUw42dQaFBu2lckqqJwxHg8Burx+u0WGXOW5nuoYZUhN6xMMKr03ryYMyj36WAee5OJaE7687R5zF8Cx2DvyD3ZIHyPRcAnIAAAAAElFTkSuQmCC # # Reciva is a mobile app. They have a web directory though. # It's a bit difficult to query, and streaming urls aren't # directly accessible. But allows to fetch all stations from # a category at once; so still a quick database. # # They probably have an API somewhere, but no public docs. # # You can optionally define a user account and password in # `.netrc` (make a `machine reciva.com` entry) → which is # going to be used implicitly. # import re from pq import pq import ahttp from config import * |
︙ | ︙ | |||
37 38 39 40 41 42 43 44 45 46 47 48 49 50 | listformat = "pls" has_search = False categories = ['60s', '70s', '80s', '90s', 'Adult', ['Adult Contemporary'], 'Alternative', 'Ambient', 'Bluegrass', 'Blues', 'Bollywood', 'Christian', ['Christian Contemporary'], 'Classic Rock', 'Classical', 'College', 'Comedy', 'Contemporary', 'Country', 'Dance', 'Discussion', 'Easy', 'Electronica', 'Experimental', 'Folk', 'Gospel', 'Greek', 'Hip Hop', 'Indian', 'Indie', ['Indie Rock'], 'Jazz', 'Jungle', 'Kids', 'Latin Hits', 'New Age', 'News', ['News Talk', 'News Updates'], 'Oldies', 'Pop', 'Public', 'Punk', 'Rap', 'Reggae', 'Religious', 'Rock', 'Short Wave Radio', 'Soft Rock', 'Spanish', 'Sports', 'Talk', 'Top 40', 'Unknown', 'Varied', 'World', ['World Africa', 'World Asia', 'World Caribbean', 'World Europe', 'World Mediterranean', 'World Middle East', 'World Tropical']] catmap = { 'classical': '14', 'dance': '18', 'bluegrass': '52', 'contemporary': '16', 'pop': '34', 'spanish': '66', 'college': '15', 'rap': '38', 'ambient': '69', 'talk': '43', 'alternative': '9', 'religious': '39', 'blues': '10', 'folk': '23', 'classic rock': '13', '90s': '7', 'adult contemporary': '8', 'oldies': '33', 'indie rock': '54', 'electronica': '21', 'unknown': '45', 'discussion': '19', 'news talk': '31', 'world mediterranean': '55', 'sports': '42', 'new age': '51', 'indie': '27', 'indian': '65', 'easy': '20', '80s': '6', 'world africa': '67', 'comedy': '62', 'public': '35', 'jungle': '72', 'reggae': '48', 'world middle east': '50', 'christian': '11', 'world caribbean': '68', '60s': '58', 'world europe': '56', 'jazz': '28', '70s': '5', 'soft rock': '41', 'top 40': '44', 'adult': '57', 'news': '30', 'bollywood': '60', 'world tropical': '53', 'latin hits': '29', 'varied': '46', 'christian contemporary': '12', 'kids': '59', 'short wave radio': '73', 'world': '49', 'world asia': '47', 'country': '17', 'news updates': '32', 'punk': '36', 'greek': '25', 'hip hop': '26', 'rock': '40', 'gospel': '24', 'experimental': '22' } titles = dict( genre="Genre", title="Station", playing="Location", bitrate="Bitrate", listeners=False ) base_url = "https://radios.reciva.com/stations/genre/%s?&start=0&count=%s" # update list def update_categories(self): self.categories = [] html = ahttp.get(self.base_url % (1, 1)) for c in re.findall('id="cg-(\d+)">([\w\d\s]+)</a></li>', html): self.catmap[c[1].lower()] = c[0] | > > > > > > | 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | listformat = "pls" has_search = False categories = ['60s', '70s', '80s', '90s', 'Adult', ['Adult Contemporary'], 'Alternative', 'Ambient', 'Bluegrass', 'Blues', 'Bollywood', 'Christian', ['Christian Contemporary'], 'Classic Rock', 'Classical', 'College', 'Comedy', 'Contemporary', 'Country', 'Dance', 'Discussion', 'Easy', 'Electronica', 'Experimental', 'Folk', 'Gospel', 'Greek', 'Hip Hop', 'Indian', 'Indie', ['Indie Rock'], 'Jazz', 'Jungle', 'Kids', 'Latin Hits', 'New Age', 'News', ['News Talk', 'News Updates'], 'Oldies', 'Pop', 'Public', 'Punk', 'Rap', 'Reggae', 'Religious', 'Rock', 'Short Wave Radio', 'Soft Rock', 'Spanish', 'Sports', 'Talk', 'Top 40', 'Unknown', 'Varied', 'World', ['World Africa', 'World Asia', 'World Caribbean', 'World Europe', 'World Mediterranean', 'World Middle East', 'World Tropical']] catmap = { 'classical': '14', 'dance': '18', 'bluegrass': '52', 'contemporary': '16', 'pop': '34', 'spanish': '66', 'college': '15', 'rap': '38', 'ambient': '69', 'talk': '43', 'alternative': '9', 'religious': '39', 'blues': '10', 'folk': '23', 'classic rock': '13', '90s': '7', 'adult contemporary': '8', 'oldies': '33', 'indie rock': '54', 'electronica': '21', 'unknown': '45', 'discussion': '19', 'news talk': '31', 'world mediterranean': '55', 'sports': '42', 'new age': '51', 'indie': '27', 'indian': '65', 'easy': '20', '80s': '6', 'world africa': '67', 'comedy': '62', 'public': '35', 'jungle': '72', 'reggae': '48', 'world middle east': '50', 'christian': '11', 'world caribbean': '68', '60s': '58', 'world europe': '56', 'jazz': '28', '70s': '5', 'soft rock': '41', 'top 40': '44', 'adult': '57', 'news': '30', 'bollywood': '60', 'world tropical': '53', 'latin hits': '29', 'varied': '46', 'christian contemporary': '12', 'kids': '59', 'short wave radio': '73', 'world': '49', 'world asia': '47', 'country': '17', 'news updates': '32', 'punk': '36', 'greek': '25', 'hip hop': '26', 'rock': '40', 'gospel': '24', 'experimental': '22' } titles = dict( genre="Genre", title="Station", playing="Location", bitrate="Bitrate", listeners=False ) base_url = "https://radios.reciva.com/stations/genre/%s?&start=0&count=%s" # init def __init__(self, parent): ChannelPlugin.__init__(self, parent) self.login() # update list def update_categories(self): self.categories = [] html = ahttp.get(self.base_url % (1, 1)) for c in re.findall('id="cg-(\d+)">([\w\d\s]+)</a></li>', html): self.catmap[c[1].lower()] = c[0] |
︙ | ︙ | |||
85 86 87 88 89 90 91 | if ls: r["url"] = ls[0] else: log.ERR("No stream found for reciva station #%s", row["id"]) return r | > > > > > > > > > > > > > | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | if ls: r["url"] = ls[0] else: log.ERR("No stream found for reciva station #%s", row["id"]) return r # Option login def login(self): lap = conf.netrc(varhosts = ("reciva.com", "radios.reciva.com")) if lap: log.LOGIN("Reciva account:", lap) ahttp.get( "https://radios.reciva.com/account/login", { "username": lap[0] or lap[1], "password": lap[2] }, timeout=2 ) |