# -*- coding: utf-8 -*-
def parse_m3u(s):
s = filter(None, map(lambda x: x.strip(), s.split('\n')))
if s[0]=='#EXTM3U':
title = ''
for i in xrange(1,len(s)):
l = s[i]
if l[0]=='#':
title = ','.join(l.split(',')[1:])
else:
yield title, l
title = ''
def parse_pls(s):
s = filter(None, map(lambda x: x.strip(), s.split('\n')))
def get(key, default=''):
matches = filter(lambda x: x.startswith(key), s)
return '='.join(matches[0].split('=')[1:]).strip() if matches else default
if s[0]=='[playlist]':
for i in xrange(1, int(get('NumberOfEntries','1'))+1):
yield get('Title%d'%i,''), get('File%d'%i,'')
def parse_playlist(s):
# — За бортом остались мелкомягкие ASX-плейлисты.
# Если кому понадобится — сооружу поддержку: там простой XML вида
#
# (надеюсь, я понятно сократил?)
# — За бортом остались SMIL-плейлисты, скармливаемые владельцам Real Player.
# Это тоже XML, и тоже довольно простой.
#
m3u = list(parse_m3u(s))
pls = list(parse_pls(s))
# Иногда различные идиоты под видом m3u и прочей экзотики пихают одинокий URL.
# Посылаю им двойной луч семилетнего поноса.
s = s.strip()
single = [('', s)] if (len(s)<256 and s.find('://')!=-1 and s.find('\n')==-1) else []
return m3u if m3u else (pls if pls else single)