#!/usr/bin/env python
# -*- coding: utf-8 -*-
# arguments
playlist = '/home/osmc/.kodi/userdata/playlists/music/douche.dpl'
lib_folder = '/media/medias/Music'
server = 'http://192.168.1.5:1961'
# get dependencies
from lxml import etree
import HTMLParser
h = HTMLParser.HTMLParser()
import urllib
# get the playlist
tree = etree.parse(playlist)
root = tree.getroot()
# get tracks
tracks = root.getchildren()
# init the output list
songs = []
# get values
for track in tracks:
item = track[0][0]
# init the dict for item
values = {}
for value in item:
# get the tag name
tag = value.tag.rsplit('}', 1)[-1]
# parse values
if tag == 'title':
#values['title'] = h.unescape(value.text)
values['title'] = value.text
elif tag == 'creator':
#values['creator'] = h.unescape(value.text)
values['creator'] = value.text
elif tag == 'originalTrackNumber':
values['trackNumber'] = value.text
elif tag == 'res':
url = value.text.replace('%25', '%')
url = url.replace(server + '/%/', '')
values['file'] = urllib.unquote(url).decode('utf-8')
if len(values) > 0:
print values
songs.append(values)
#print songs
#first = tracks[0]
#dlite1 = first[0]
#item = dlite1[0]
#title = item.find('dc:title', dlite1.nsmap)
#artist = item.find('dc:creator', dlite1.nsmap)
#tracknb = item.find('upnp:originalTrackNumber', dlite1.nsmap)
#res = item.find('res')
#print artist.text
#print title.text
#print tracknb.text
#print res.text
# print toto.tag.rsplit('}', 1)[-1]
douche.dpl
<?xml version='1.0' encoding='UTF-8' ?>
<linn:Playlist linn:version="3" xmlns:linn="urn:linn-co-uk/playlist">
<linn:Track>
<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:sec="http://www.se$
<item id="musicdb://artists/257/-1/805.mp3?albumartistsonly=false&artistid=257" parentID="musicdb://artists/257/-1/?albumartistsonly=false&artistid=257" restricted="1">
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
<dc:title>Between The Devil And The Deep Blue Sea</dc:title>
<dc:creator>Django Reinhardt</dc:creator>
<upnp:artist>Django Reinhardt</upnp:artist>
<upnp:artist role="Performer">Django Reinhardt</upnp:artist>
<upnp:artist role="AlbumArtist">Django Reinhardt</upnp:artist>
<dc:publisher>Unknown</dc:publisher>
<upnp:genre>Other</upnp:genre>
<upnp:album>Django With His American Friends Disc One</upnp:album>
<upnp:originalTrackNumber>17</upnp:originalTrackNumber>
<ownerUdn>a4915f5c-77a6-1587-7cd3-aab5364e9d03</ownerUdn>
<res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000" duration="0:02:57.000">http://192.168.1.5:1961/%25/895519FCC53663234161D6CC2CD162C5/Dicky%2520$
</item>
</DIDL-Lite>
</linn:Track>
<linn:Track>
<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:sec="http://www.se$
<item id="musicdb://artists/257/-1/705.mp3?albumartistsonly=false&artistid=257" parentID="musicdb://artists/257/-1/?albumartistsonly=false&artistid=257" restricted="1">
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
<dc:title>Blue Moon</dc:title>
<dc:creator>Django Reinhardt</dc:creator>
<upnp:artist>Django Reinhardt</upnp:artist>
<upnp:artist role="Performer">Django Reinhardt</upnp:artist>
<upnp:artist role="AlbumArtist">Django Reinhardt</upnp:artist>
<dc:publisher>Unknown</dc:publisher>
<upnp:genre>Other</upnp:genre>
<upnp:album>Django With His American Friends Disc One</upnp:album>
<upnp:originalTrackNumber>2</upnp:originalTrackNumber>
<ownerUdn>a4915f5c-77a6-1587-7cd3-aab5364e9d03</ownerUdn>
<res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000" duration="0:03:15.000">http://192.168.1.5:1961/%25/B8D0809D1D3871801B2A14C621C8D4B1/Coleman%25$
</item>
</DIDL-Lite>
</linn:Track>
<linn:Track>
<DIDL-Lite xmlns="urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dlna="urn:schemas-dlna-org:metadata-1-0/" xmlns:sec="http://www.se$
<item id="musicdb://artists/257/-1/834.mp3?albumartistsonly=false&artistid=257" parentID="musicdb://artists/257/-1/?albumartistsonly=false&artistid=257" restricted="1">
<upnp:class>object.item.audioItem.musicTrack</upnp:class>
<dc:title>Les yeux noirs</dc:title>
<dc:creator>Django Reinhardt</dc:creator>
<upnp:artist>Django Reinhardt</upnp:artist>
<upnp:artist role="Performer">Django Reinhardt</upnp:artist>
<upnp:artist role="AlbumArtist">Django Reinhardt</upnp:artist>
<dc:publisher>Unknown</dc:publisher>
<upnp:genre>Jazz</upnp:genre>
<upnp:album>Accords parfaits</upnp:album>
<upnp:originalTrackNumber>13</upnp:originalTrackNumber>
<ownerUdn>a4915f5c-77a6-1587-7cd3-aab5364e9d03</ownerUdn>
<res protocolInfo="http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=01;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=01500000000000000000000000000000" duration="0:03:10.000">http://192.168.1.5:1961/%25/07A5F8F1AAEE46D85C05D4C5F4DB69CB/Django%252$
</item>
</DIDL-Lite>
</linn:Track>
</linn:Playlist>
tests.pl
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# http://stackoverflow.com/questions/14853243/parsing-xml-with-namespace-in-python-via-elementtree
import xml.etree.ElementTree
e = xml.etree.ElementTree.parse('/home/osmc/.kodi/userdata/playlists/music/douche.dpl').getroot()
namespaces = {'upnp': 'urn:schemas-upnp-org:metadata-1-0/upnp/','dc': 'http://purl.org/dc/elements/1.1/','dlna': 'urn:schemas-dlna-org:metadata-1-0/','sec': 'http://www.sec.co.kr/'}
e.findall('upnp:artist', namespaces)
from lxml import etree
tree = etree.parse("/home/osmc/.kodi/userdata/playlists/music/douche.dpl")
root = tree.getroot()
root.findall('upnp:artist', root.nsmap)
from lxml import etree
tree = etree.parse("/home/osmc/.kodi/userdata/playlists/music/douche.dpl")
root = tree.getroot()
root
# OUT: <Element {urn:linn-co-uk/playlist}Playlist at 0x76153d50>
tracks = root.getchildren()
tracks[0]
# OUT: <Element {urn:linn-co-uk/playlist}Track at 0x7616aa08>
first = tracks[0]
first
# OUT: <Element {urn:linn-co-uk/playlist}Track at 0x7616aa08>
dlite1 = first[0]
dlite1
# OUT: <Element {urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/}DIDL-Lite at 0x7616aa58>
item = dlite1[0]
item
# OUT: <Element {urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/}item at 0x7616a850>
artist = item.find('upnp:artist', dlite1.nsmap)
artist
# OUT: <Element {urn:schemas-upnp-org:metadata-1-0/upnp/}artist at 0x760fb8c8>
artist.text
# OUT: 'Django Reinhardt'
www.m3u
#EXTM3U #EXTINF:0,audio addons://more/audio #EXTINF:0,18. Rammstein - Rammstein (Edit) /media/medias/Music/Rammstein/Rammstein - Rammstein (edit).mp3 #EXTINF:0,20. Rammstein - Hierate Mich (Edit) /media/medias/Music/Rammstein/Rammstein - Heirate mich (edit).mp3 #EXTINF:0,08. Abyssinians - 08 - Satta Massagana /media/medias/Music/The Abyssinians/The Abyssinians - Satta Massagana.mp3 #EXTINF:0,12. The All Seeing I - Beat Goes On /media/medias/Music/The All Seeing I/The All Seeing I - The Beat Goes On.mp3 #EXTINF:0,01. 4 Hero - Conceptions /media/medias/Music/4hero/Creating Patterns/01. 4hero - Conceptions.mp3 #EXTINF:0,13. 4 Hero - Les Fleur /media/medias/Music/4hero/4hero - Les Fleur.mp3 #EXTINF:0,01. <Inconnu> - Compil-Filip-01 /media/medias/Music/P. Diddy/P. Diddy - Show Me Your Soul.mp3 #EXTINF:0,02. Amy Winehouse - You Know I'm No Good /media/medias/Music/Amy Winehouse/Back to Black/11. Amy Winehouse - You Know Im No Good (remix).mp3 #EXTINF:0,03. Amy Winehouse - Me & Mr. Jones /media/medias/Music/Amy Winehouse/Back to Black/03. Amy Winehouse - Me & Mr Jones.mp3 #EXTINF:0,05. Amy Winehouse - Back To Black /media/medias/Music/Amy Winehouse/Amy Winehouse - Back to Black.mp3 #EXTINF:0,04. Amy Winehouse - Fuck Me Pumps /media/medias/Music/Amy Winehouse/Amy Winehouse - Fuck Me Pumps.mp3 #EXTINF:0,02. Amy Winehouse - You Know I'm No Good /media/medias/Music/Amy Winehouse/Back to Black/11. Amy Winehouse - You Know I’m No Good (remix).mp3 #EXTINF:0,03. M+S - Est-Ce Que C'est Ça ? /media/medias/Music/-M-/Mister Mystère/03. -M- - Est-ce que c'est ça ?.mp3
yes.pl
from lxml import etree
tree = etree.parse("/home/osmc/.kodi/userdata/playlists/music/douche.dpl")
root = tree.getroot()
root
# OUT: <Element {urn:linn-co-uk/playlist}Playlist at 0x76153d50>
tracks = root.getchildren()
tracks[0]
# OUT: <Element {urn:linn-co-uk/playlist}Track at 0x7616aa08>
first = tracks[0]
first
# OUT: <Element {urn:linn-co-uk/playlist}Track at 0x7616aa08>
dlite1 = first[0]
dlite1
# OUT: <Element {urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/}DIDL-Lite at 0x7616aa58>
item = dlite1[0]
item
# OUT: <Element {urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/}item at 0x7616a850>
artist = item.find('upnp:artist', dlite1.nsmap)
artist
# OUT: <Element {urn:schemas-upnp-org:metadata-1-0/upnp/}artist at 0x760fb8c8>
artist.text
# OUT: 'Django Reinhardt'