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