Check-in [a1af3dc990]
Overview
Comment: | add ajax station url fetching mode |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a1af3dc990e876c737be8a08386c1c96 |
User & Date: | mario on 2022-02-28 08:12:40 |
Other Links: | manifest | tags |
Context
2022-03-01
| ||
08:37 | Add developer API support for shoutcast. check-in: e3d1d9a216 user: mario tags: trunk | |
2022-02-28
| ||
08:12 | add ajax station url fetching mode check-in: a1af3dc990 user: mario tags: trunk | |
2022-02-22
| ||
00:31 | Release as 2.2.2 check-in: 8b7a75f548 user: mario tags: trunk, 2.2.2 | |
Changes
Modified channels/shoutcast.py from [f3940fc734] to [39c956323b].
1 2 3 4 5 6 7 | # api: streamtuner2 # title: Shoutcast.com # description: Primary list of shoutcast servers (now managed by radionomy). # type: channel # category: radio # author: Mario # original: Jean-Yves Lefort | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # api: streamtuner2 # title: Shoutcast.com # description: Primary list of shoutcast servers (now managed by radionomy). # type: channel # category: radio # author: Mario # original: Jean-Yves Lefort # version: 1.7 # url: http://directory.shoutcast.com/ # config: # { name: shoutcast_format, type: select, select: pls|m3u|xspf|json, value: pls, description: "Shoutcast playlist format to retrieve" } # priority: default # png: # iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAelJREFUOI2NU0toE2EYnM12t2wLkhSXSIgEJMHFQ2naQ+kpoPYQoaXH3gRFsegloUhRQTyU2oOgggQUzzlEQomIBzU+EHooBIol0cOGLqFFFiJ5SB5skvFU6ebRduA7/DAz # /PM9BJLoh3Q6zVQqBZfLhXq9jlAohHA4LHTzhvqJ2+02c7kcgsEgfD4fRFFEPp+HZVmUJEk41kAURcHv99Pj8cAwDGiaBkVR0C0GAJDsW7VajYVCgYlEguVymZZlsVKpcG1tlYd5fX8AAIqiCF6vF6VSibIsI5lMYvvDE1xymwDu/ec5BhkcIJPJIHJzFqf372P1cgMf # f46cLIKu61yJXufr5VO0voyzEZ/k8sI4s9ns0RFarRZjL56inIshekWGenYS6IzhR9PCntRBIBCw8XsiFItFNLMxPJgfwVjDi4Y8g2b9DILaMKZGd2Ca5tEGiqJg2xjF200H6J+AvKtjeG8T3998xW5nAk6n08bviSBJEqhewLlpN4bMHfwxfuH5J8J98SGerS/B4XDY # d+FwQ6rVKm8vXeP++6vku2lu3FEZubFIXdc5qNm2x93ILZobszRfaYwuaIzH4wOFfafwt7CFb59/Y0uYx8rLR1BVtXd1u2AzCMwsQg6cx+O5uWOFBxAGnfNJ8Q/z/DNTtgbnsgAAAABJRU5ErkJggg== # depends: re, ahttp |
︙ | ︙ | |||
129 130 131 132 133 134 135 136 137 138 139 140 141 142 | IsRadionomy:true Listeners:159 Name:"AOLMRadio" StreamUrl:null """ entries = [] for e in json: entries.append({ "id": int(e.get("ID", 0)), "genre": str(e.get("Genre", "")), "title": str(e.get("Name", "")), "playing": str(e.get("CurrentTrack", "")), "bitrate": int(e.get("Bitrate", 0)), "listeners": int(e.get("Listeners", 0)), | > > > > | > > > > > > > > > | 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 157 158 159 160 161 162 163 164 | IsRadionomy:true Listeners:159 Name:"AOLMRadio" StreamUrl:null """ entries = [] for e in json: if self.listformat == "json": url = "urn:shoutcast:" + str(e["ID"]) else: url = "http://yp.shoutcast.com/sbin/tunein-station.%s?id=%s" % (self.listformat, e.get("ID", "0")) entries.append({ "id": int(e.get("ID", 0)), "genre": str(e.get("Genre", "")), "title": str(e.get("Name", "")), "playing": str(e.get("CurrentTrack", "")), "bitrate": int(e.get("Bitrate", 0)), "listeners": int(e.get("Listeners", 0)), "url": url, "listformat": self.listformat, "homepage": "", "format": str(e.get("Format", "")) }) #log.DATA(entries) return entries # in case we're using AJAX lookups over tunein-station.pls def resolve_urn(self, row): if not row.get("id") or not row.get("url", "").startswith("urn:shoutcast:"): return url = ahttp.get("https://directory.shoutcast.com/Player/GetStreamUrl", {"station":row["id"]}, post=1) row["url"] = url.strip('"') return row["url"] |