Check-in [cf32efcb61]
Overview
| Comment: | Implement state: mapping (though no idea what 0-2 mean), and make default API key internally predefined again. |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
cf32efcb61007c07c61b099d45819315 |
| User & Date: | mario on 2015-04-30 20:54:10 |
| Other Links: | manifest | tags |
Context
|
2015-04-30
| ||
| 21:21 | A little more comments on playlist_export usage. check-in: bf7e0f1bf3 user: mario tags: trunk | |
| 20:54 | Implement state: mapping (though no idea what 0-2 mean), and make default API key internally predefined again. check-in: cf32efcb61 user: mario tags: trunk | |
| 20:37 | Add delicast favicon. check-in: 046dd8a5da user: mario tags: trunk | |
Changes
Modified channels/dirble.py from [0aabd4d53a] to [b1c153b5bc].
1 2 3 4 5 6 7 8 9 | # encoding: UTF-8 # api: streamtuner2 # title: Dirble # description: Song history tracker for Internet radio stations. # url: http://dirble.com/ # version: 2.0 # type: channel # category: radio # config: | | < < < < < < < < > > > | > > > > > > > > > > > | 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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# encoding: UTF-8
# api: streamtuner2
# title: Dirble
# description: Song history tracker for Internet radio stations.
# url: http://dirble.com/
# version: 2.0
# type: channel
# category: radio
# config:
# { name: dirble_api_key, value: "", type: text, description: Alternative API access key. }
# png:
# iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAA3NCSVQICAjb4U/gAAACP0lE
# QVQokVVSO0+UURA9M/d+jyWbBVcQFSQhPqJSYBRFA5pVoFGURApjYYWtvYUNP8FKOwsttDFq
# jMTEWEiDD0wETNSIxJC46yqEsCz7ve4di28hOO2cMzNnzqH+azcBACAiAgQg1EsAQESwCYBA
# pwCxNowjI1v7YGLH0Y5iSQFhJEprYjZxtG13+/lCb2dOWxBBABiTrJSLkx8+z/xa0yRutml4
# sC9X+qqJyFqTzTcPDfTup2p5NSTFSintOFmvZ7iv687Dl8/ezufaGgcHT2enKjpdbxMbRcnr
# x09uT36JfJ9FWLtnCoWxkRM3Ris/F//Mlpce3LtvSsW6BhAxs5VgtVqtxUaJQCqPnr4ItXfr
# Uve5fVM/PpbZzXgNniYCEaUs1spxdKIdBUvEsr4282nu29nuowdbmov2ytXRxukJBhGwwRCI
# 1F9pRbSjlytheTnY3t6iHCcMo9BYxtai1AymjSlRbII4YUcRAQQiMKWO0Vbahk2An3H9jJvU
# IhEQCKD/TiJiZsXEzMxMYSy78rnOVvf34lISJ8R1pwGqpyCJkvUgCiyziFjJ5Fv7Tx5r07WJ
# udJajRVDAI30TUQilG1qPry3I/Y9BThubmigb+R4x8L0m1fz5Ti3h0QE0ClcQCA+dflCz0VD
# RKwUE5mgOvtu8u7z9wsVsyPPrBxfayqMjVtrMrmmI4f27swqkVS+GGMqy39nvy+W1uGxKL+h
# u+uAt1KkwvVxAGJsEEWxEWzGm4iV8l1HM9K0BmEkrP8BlhoAUfmOxecAAAAASUVORK5CYII=
# priority: optional
# documentation: http://dirble.com/developer/api
#
#
# Server responses take a few seconds, and JSON
# decoding is surprisingly slow.
import json
from config import *
from channels import *
import ahttp
# Dirble
#
# Hmm ok, the new v2 API isn't so bad after all.
# It actually contains streaming urls, and even
# station homepages now.
#
# ยท No idea what status: or timedout: mean,
# just mapped to `deleted` and `status`
# ยท Stream alternatives aren't yet sorted.
# ยท Leave favicons to regular behaviour,
# station banners are not accessible per CDN.
#
class dirble (ChannelPlugin):
# control flags
has_search = False
listformat = "srv"
titles = dict(listeners=False, playing="Location")
base = "http://api.dirble.com/v2/{}"
key = "a0bdd7b8efc2f5d1ebdf1728b65a07ece4c73de5"
# Retrieve cat list and map
def update_categories(self):
cats = []
for row in self.api("categories/tree"):
print row
|
| ︙ | ︙ | |||
89 90 91 92 93 94 95 |
title = r["name"],
playing = "{country} {description}".format(**r),
homepage = r["website"],
url = s["stream"],
format = s["content_type"],
bitrate = s["bitrate"],
# img = r["image"]["image"]["thumb"]["url"], # CDN HTTPS trip up requests.get
| | > > | > > | | 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
title = r["name"],
playing = "{country} {description}".format(**r),
homepage = r["website"],
url = s["stream"],
format = s["content_type"],
bitrate = s["bitrate"],
# img = r["image"]["image"]["thumb"]["url"], # CDN HTTPS trip up requests.get
state = self.state_map[int(s["status"])] if s["status"] in [0,1,2] else "",
deleted = s["timedout"],
)
state_map = ["gtk-media-pause", "gtk-media-next", "gtk-media-rewind"]
# Patch API url together, send request, decode JSON list
def api(self, method, **params):
params["token"] = conf.dirble_api_key or self.key
try:
# HTTP request and JSON decoding take a while
r = ahttp.get(self.base.format(method), params)
r = json.loads(r)
if isinstance(r, dict) and "error" in r:
log.ERR(r["error"])
raise Exception
# cut down stream list
if len(r) > int(conf.max_streams):
del r[int(conf.max_streams):]
except Exception as e:
log.ERR("Dirble API retrieval failure:", e)
r = []
return r
|