User Tools

osmc playlist reader experiment (pls2m3u)

#!/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&amp;artistid=257" parentID="musicdb://artists/257/-1/?albumartistsonly=false&amp;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&amp;artistid=257" parentID="musicdb://artists/257/-1/?albumartistsonly=false&amp;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&amp;artistid=257" parentID="musicdb://artists/257/-1/?albumartistsonly=false&amp;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'

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information