Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

Is it any way to import/export Radio Station list of Rhythmbox?

If not, could you please suggest me any good music player which has similar functionality like Rhythmbox?

Thank you!

share|improve this question
1  
You mean radio stations? –  Javier González Jan 14 '11 at 20:35
    
Yes, I mean radio stations –  Bakhtiyor Jan 17 '11 at 11:01
add comment

3 Answers 3

rhythmbox stores information about all music-files in ~/.local/share/rhythmbox/rhythmdb.xml

Entries concerning radiostations start with "entry type iradio".

share|improve this answer
    
Yeah you are right, I knew that before. But I am looking for some easier way, if one exists. –  Bakhtiyor Jan 15 '11 at 11:56
add comment

You can use xmlstarlet to pull the essential data out of your XML file. See here for details:

http://steffen67.blogspot.com/2011/05/how-to-export-rhythmbox-radio-stations.html

share|improve this answer
    
nice pointing to xmlstarlet tutorial for this –  Sabacon Feb 8 '12 at 0:16
1  
Whilst this may theoretically answer the question, it would be preferable to include the essential parts of the answer here, and provide the link for reference. –  Marco Ceppi Feb 8 '12 at 0:39
    
Sorry about that. I just edited it to include the main idea. (Thanks for the link. I was worried that reposting other info would be duplicating web data unnecessarily.) –  colan Feb 8 '12 at 4:55
add comment

here's a python script to do the same thing, i.e. extract names and locations of internet radio stations from the xml data base used by Rhythmbox:

import xml.sax.handler
import xml.sax
import pprint

class RhythmboxPlaylistHandler(xml.sax.handler.ContentHandler):
    def __init__(self):
        self.inRTitle = False
        self.inRLocation = False
        self.entrytype = "undefined"
        self.titlebuffer = ""
        self.locationbuffer = ""
        self.radiostations = {}

    def startElement(self, name, attributes):
        if name == "entry":
            self.entrytype = attributes["type"]  # we're interested in type="iradio"
        elif name == "title" and self.entrytype == "iradio":
            self.inRTitle = True
        elif name == "location" and self.entrytype == "iradio":
            self.inRLocation = True

    def characters(self, data):
        if self.inRTitle:
            self.titlebuffer += data
        elif self.inRLocation:
            self.locationbuffer += data

    def endElement(self, name):
        if name == "title":
            self.inRTitle = False
        elif name == "location":
            self.inRLocation = False
        elif name == "entry" and self.entrytype == "iradio":
            self.radiostations[self.titlebuffer] = self.locationbuffer
            self.titlebuffer=""
            self.locationbuffer=""

parser = xml.sax.make_parser(  )
handler = RhythmboxPlaylistHandler(  )
parser.setContentHandler(handler)
parser.parse("work_copy_of_rhythmdb.xml")
pprint.pprint(handler.radiostations)

rstations=handler.radiostations

rskeys=[key for key in rstations]
rskeys.sort()

ofile=open("rhytmbox_current_internet_radiostations.txt","w")
ofile.write("#   {0:41}  -->  {1}\r\n".format('radio station name','location'))
ofile.write("#"+120*'-'+"\r\n")
for key in rskeys:
    ofile.write("{0:45}  -->  {1}\r\n".format(key,rstations[key]))
ofile.close()

(I started with this tutorial on working with XML data bases from within python: http://oreilly.com/catalog/pythonxml/chapter/ch01.html)

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.