#/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"))
|