Check-in [aaf273595a]
Overview
| Comment: | Fix radiolist.net current page layout extraction (some countries empty now, just webplayers for some pages) |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
aaf273595a3d3b9ce92ae705a3c49943 |
| User & Date: | mario on 2018-01-15 19:43:47 |
| Other Links: | manifest | tags |
Context
|
2018-01-15
| ||
| 20:05 | Update delicast plugin for new q: url scheme check-in: 33053d07d0 user: mario tags: trunk | |
| 19:43 | Fix radiolist.net current page layout extraction (some countries empty now, just webplayers for some pages) check-in: aaf273595a user: mario tags: trunk | |
|
2017-11-17
| ||
| 13:20 | Change default streamripper user agent to 'iTunes 12.5/Gecko/SR' check-in: e4d747b68a user: mario tags: trunk | |
Changes
Modified contrib/radiolist.py from [b9c7e173ba] to [bca1fb8450].
1 2 3 4 5 | # encoding: UTF-8 # api: streamtuner2 # title: radiolist.net # description: Station list by continent+country # url: http://radiolist.net/ | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 | # encoding: UTF-8 # api: streamtuner2 # title: radiolist.net # description: Station list by continent+country # url: http://radiolist.net/ # version: 0.4 # type: channel # category: radio # priority: extra # png: # iVBORw0KGgoAAAANSUhEUgAAABgAAAAYBAMAAAASWSDLAAAAFVBMVEVKb61qibyDnMegs9S6yeDV4O37/vyx66abAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMB # AJqcGAAAAAd0SU1FB+ECDBAgLJqgZW4AAADoSURBVBjTNdBNj4MgEAbgqdLeZdo9C5NwFmo5Y7Wedauc1y/+/09YdLskkDwJmZl3IOxnON4A8frQhdc/7mG2cv3gx29X # rdUfZuVHQ3JHEzZ7GSuNXxFV/FYYwryO6MOiZqEdnQPUC/fsXZaMuxa6MFfOVYN7kIWpHZClyJGLFjbbC617KaRUEJ4r4fU7IqNYrW5f2kgU5gZInG6MZ086eejcyIvO |
| ︙ | ︙ | |||
72 73 74 75 76 77 78 |
sub.append(t)
self.catmap[t] = p
c.append(sorted(sub))
self.categories = c
# extract stream urls
def update_streams(self, cat):
| | | | | > > > | | | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
sub.append(t)
self.catmap[t] = p
c.append(sorted(sub))
self.categories = c
# extract stream urls
def update_streams(self, cat):
rx_title = re.compile('<a\s+href="([^">]+)"[^>]+target="_blank"[^>]*>(.+?)</a>', re.I)
rx_urls = re.compile('<a href="([^">]+)">(\d+)(?: Kbps)*</a>', re.I)
rx_genre = re.compile('<td[^>]+>(\w*[^<>]*)</td>\s*<td[^>]+>(\w+[^<>]+)</td>\s*$', re.I)
entries = []
html = ahttp.get("http://radiolist.net/" + self.catmap[cat])
log.DATA(html)
for block in re.findall("<tr>(.+?)</tr>", html, re.S):
log.BLOCK(block)
ut = re.findall(rx_title, block) # homepage+title
uu = re.findall(rx_urls, block) # urls+bitrates
lg = re.findall(rx_genre, block) # location+genre
#print ut, uu, lg
if ut and uu and lg:
log.D(ut,uu,lg)
url, br = self.best_url(uu)
entries.append(dict(
homepage = ut[0][0],
title = unhtml(ut[0][1]),
url = url,
bitrate = br,
format = self.mime_guess(url, "audio/mpeg"),
listformat = self.list_guess(url),
playing = lg[0][0],
genre = lg[0][1]
))
# done
[log.DATA(e) for e in entries]
return entries
# pick highest rated URL from [(url,bitrate),…] tuples
def best_url(self, urls):
r = dict([(u, to_int(b)) for u,b in urls]) # {url: bitrate, …}
best = sorted(r, key=r.get, reverse=True)
return best[0], r[best[0]]
|