From b1af50776f17b5a7bf1418de5f86553113fe0cd3 Mon Sep 17 00:00:00 2001 From: Lars Kiesow Date: Tue, 30 Apr 2013 17:54:38 +0200 Subject: [PATCH] feedgenerator: More work on podcasts --- feedgenerator/__main__.py | 3 ++ feedgenerator/podcast.py | 81 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/feedgenerator/__main__.py b/feedgenerator/__main__.py index f30946e..7413e9b 100644 --- a/feedgenerator/__main__.py +++ b/feedgenerator/__main__.py @@ -66,6 +66,9 @@ if __name__ == '__main__': elif arg == 'podcast': fg.itunes_author('Lars Kiesow') fg.itunes_category('Technology', 'Podcasting') + fg.itunes_explicit('no') + fg.itunes_complete('no') + fg.itunes_new_feed_url('http://example.com/new-feed.rss') print fg.podcast_str(pretty=True) elif arg.endswith('atom'): fg.atom_file(arg) diff --git a/feedgenerator/podcast.py b/feedgenerator/podcast.py index 56c1365..d326275 100644 --- a/feedgenerator/podcast.py +++ b/feedgenerator/podcast.py @@ -24,9 +24,13 @@ class PodcastGenerator(FeedGenerator): ## ITunes tags # http://www.apple.com/itunes/podcasts/specs.html#rss - __itunes_author = None - __itunes_block = None - __itunes_category = None + __itunes_author = None + __itunes_block = None + __itunes_category = None + __itunes_image = None + __itunes_explicit = None + __itunes_complete = None + __itunes_new_feed_url = None @@ -62,6 +66,18 @@ class PodcastGenerator(FeedGenerator): subcategory = etree.SubElement(category, '{%s}category' % ITUNES_NS) subcategory.attrib['text'] = self.__itunes_category['sub'] + if self.__itunes_explicit in ('yes', 'no', 'clean'): + explicit = etree.SubElement(channel, '{%s}explicit' % ITUNES_NS) + explicit.text = self.__itunes_explicit + + if self.__itunes_complete in ('yes', 'no'): + complete = etree.SubElement(channel, '{%s}complete' % ITUNES_NS) + complete.text = self.__itunes_complete + + if self.__itunes_new_feed_url: + new_feed_url = etree.SubElement(channel, '{%s}new-feed-url' % ITUNES_NS) + new_feed_url.text = self.__itunes_new_feed_url + return feed, doc @@ -163,7 +179,66 @@ class PodcastGenerator(FeedGenerator): return self.__itunes_image + def itunes_explicit(self, itunes_explicit=None): + '''Get or the the itunes:explicit value of the podcast. This tag should + be used to indicate whether your podcast contains explicit material. The + three values for this tag are "yes", "no", and "clean". + If you populate this tag with "yes", an "explicit" parental advisory + graphic will appear next to your podcast artwork on the iTunes Store and + in the Name column in iTunes. If the value is "clean", the parental + advisory type is considered Clean, meaning that no explicit language or + adult content is included anywhere in the episodes, and a "clean" graphic + will appear. If the explicit tag is present and has any other value + (e.g., "no"), you see no indicator — blank is the default advisory type. + + :param itunes_explicit: If the podcast contains explicit material. + :returns: If the podcast contains explicit material. + ''' + if not itunes_explicit is None: + if not itunes_explicit in ('', 'yes', 'no', 'clean'): + raise ValueError('Invalid value for explicit tag') + self.__itunes_explicit = itunes_explicit + return self.__itunes_explicit + + + def itunes_complete(self, itunes_complete=None): + '''Get or set the itunes:complete value of the podcast. This tag can be + used to indicate the completion of a podcast. + + If you populate this tag with "yes", you are indicating that no more + episodes will be added to the podcast. If the tag is + present and has any other value (e.g. “no”), it will have no effect on + the podcast. + + :param itunes_complete: If the podcast is complete. + :returns: If the podcast is complete. + ''' + if not itunes_complete is None: + if not itunes_complete in ('yes', 'no', '', True, False): + raise ValueError('Invalid value for complete tag') + if itunes_complete == True: + itunes_complete = 'yes' + if itunes_complete == False: + itunes_complete = 'no' + self.__itunes_complete = itunes_complete + return self.__itunes_complete + + + def itunes_new_feed_url(self, itunes_new_feed_url=None): + '''Get or set the new-feed-url property of the podcast. This tag allows + you to change the URL where the podcast feed is located + + After adding the tag to your old feed, you should maintain the old feed + for 48 hours before retiring it. At that point, iTunes will have updated + the directory with the new feed URL. + + :param itunes_new_feed_url: New feed URL. + :returns: New feed URL. + ''' + if not itunes_new_feed_url is None: + self.__itunes_new_feed_url = itunes_new_feed_url + return self.__itunes_new_feed_url _itunes_categories = {