PyPodcastGen

SnippSnappHome | RecentChanges | Preferences

#/usr/bin/python2.3
import datetime,urlparse,os
import PyRSS2Gen
import eyeD3



class Audiofile:
    def __init__(self, collection, basename):
        self.basename = basename
        self.path = os.path.join(collection.dirname, basename)
        self.link = urlparse.urljoin(collection.urlbase, basename)

        tag = eyeD3.Tag()
        tag.link(self.path)

        mp3file = eyeD3.Mp3AudioFile(self.path)

        title = tag.getTitle()
        if title: self.title = title
        else:     self.title = basename[:-4]

        description = tag.getComment()
        if description: self.description = description
        else:     self.description = basename[:-4]

        self.guid = PyRSS2Gen.Guid(self.link)
        self.size = os.path.getsize(self.path)
        self.enclosure = PyRSS2Gen.Enclosure(self.link, mp3file.getPlayTimeString(), "audio/mpeg")
        self.pubdate = datetime.datetime.fromtimestamp(os.path.getmtime(self.path))
                              

class Audiofiles:
    """
    A collection of audiofiles and some metadata, used as the basis for at 
    
    """

    def __init__(self,urlbase,title, link, description, language):


        self.urlbase = urlbase
        self.title = title
        self.link = link
        self.description = description
        self.language = language
        
        self.data = []

        self.generator = PyRSS2Gen._generator_name        

    def append(self,audiofile):
        self.data.append(audiofile)

    def readfolder(self,dirname):
        self.dirname = dirname
        files = os.listdir(dirname)
        for f in files:
            path = os.path.join(dirname,f)
            if os.path.exists(path) and os.path.isfile(path) and path.endswith(".mp3"):

                
                audiofile = Audiofile(self, f)
                self.append(audiofile)

    def rssitems(self,n=10):
        result = []
        for audiofile in self.data:

            rssitem = PyRSS2Gen.RSSItem(title = audiofile.title,
                                        link = audiofile.link,
                                        description = audiofile.description,
                                        guid = audiofile.guid,
                                        pubDate = audiofile.pubdate,
                                        enclosure = audiofile.enclosure)
            result.append(rssitem)

        waste = [(i.pubDate,i) for i in result]
        waste.sort()
        waste.reverse()
        waste = waste[:n]
        result = [pair[1] for pair in waste]
        
        return result

    def getrss(self):
        return PyRSS2Gen.RSS2(title = self.title,
                              link = self.link,
                              description = self.description,
                              language = self.language,
                              generator = self.generator,
                              lastBuildDate = datetime.datetime.now(),                         
                              items = self.rssitems())
        
        

if __name__ == "__main__":
    #Example usage

    audiofiles = Audiofiles("http://path/to/mp3/",
                            "A title for your podcast",
                            "http://yourdomain.com/aboutyourpodcast",
                            "A long winded description of your very fine podcast",
                            "en")

    audiofiles.readfolder("/path/to/your/mp3/folder")
    outfilename = "/path/to/your/feedfile.xml"

    rss = audiofiles.getrss()
    rss.write_xml(open(outfilename, "w"))


SnippSnappHome | RecentChanges | Preferences
This page is read-only | View other revisions
Last edited February 15, 2006 9:46 am by 81-232-78-86-no46.tbcn.telia.com (diff)
Search: