1
2
3
4
5
6
7
8
9
10
11
12
|
1
2
3
4
5
6
7
8
9
10
11
12
|
-
+
|
# encoding: UTF-8
# api: streamtuner2
# title: RadioBrowser
# description: Community collection of stations; votes, clicks, homepage links.
# version: 0.1
# version: 0.3
# type: channel
# url: http://www.radio-browser.info/
# category: radio
# priority: optional
# config:
# { type=select, name=radiobrowser_cat, value=tags, select="tags|countries|languages", description=Which category types to list. }
# documentation: http://www.radio-browser.info/#ui-tabs-7
|
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
+
|
# Clementine / Kodi / RadioDroid / etc.
import re
import json
from config import *
from channels import *
from uikit import uikit
import ahttp
# API endpoints:
# http://www.radio-browser.info/webservice/json/countries
# http://www.radio-browser.info/webservice/json/languages
# http://www.radio-browser.info/webservice/json/tags
|
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
-
+
+
+
+
+
+
|
has_search = True
listformat = "pls"
titles = dict(listeners="Votes+", bitrate="Votes-", playing="Country")
base = "http://www.radio-browser.info/webservice/json/"
categories = []
pricat = ("topvote", "topclick")
catmap = { "tags": "bytag", "countries": "bycountry", "languages": "bylanguage" }
# hook menu
def __init__(self, parent):
ChannelPlugin.__init__(self, parent)
if parent:
uikit.add_menu([parent.streammenu, parent.streamactions], "Share in Radio-Browser", self.submit, insert=5)
# votes, and tags, no countries or languages
def update_categories(self):
self.categories = list(self.pricat)
for sub in [conf.radiobrowser_cat]:
cats = []
for entry in self.api(sub):
|
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
|
listeners = int(e["votes"]),
bitrate = - int(e["negativevotes"]),
))
return r
# fetch multiple pages
def api(self, method, params={}):
j = ahttp.get(self.base + method, params)
def api(self, method, params={}, post=False):
j = ahttp.get(self.base + method, params, post=post)
try:
return json.loads(j, strict=False) # some entries contain invalid character encodings
except:
return []
# Add radio station to RBI
def submit(self, *w):
cn = self.parent.channel()
row = cn.row()
# convert row from channel
data = dict(
name = row["title"],
url = row["url"],
homepage = row["homepage"],
#favicon = self.parent.favicon.html_link_icon(row["url"]), # no longer available as module
tags = row["genre"].replace(" ", ","),
)
# map extra fields
for _from,_val,_to in [("playing","location","country")]:
#country Austria The name of the country where the radio station is located
#state Vienna The name of the part of the country where the station is located
#language English The main language which is used in spoken text parts of the radio station.
if _from in cn.titles and cn.titles[_from].lower() == _val:
data[_to] = _from
# API submit
j = self.api("add", data, post=1)
log.SUBMIT_RBI(j)
if j and "ok" in j and j["ok"] == "true" and "id" in j:
self.parent.status("Submitted successfully to Radio-Browser.info, new station id #%s." % j["id"], timeout=15)
|