]> git.0d.be Git - panikweb.git/commitdiff
misc: include tags as dc:subject in podcast feed
authorFrédéric Péters <fpeters@0d.be>
Fri, 16 Dec 2016 12:34:39 +0000 (13:34 +0100)
committerFrédéric Péters <fpeters@0d.be>
Fri, 16 Dec 2016 12:34:39 +0000 (13:34 +0100)
panikweb/views.py

index 471c26af092f3bcb0c39c8a7bd37ece768ea6db5..a95d7e535d73514115492e54174d1bb792e1f0f7 100644 (file)
@@ -20,7 +20,7 @@ from django.core.paginator import Paginator
 
 from django.contrib.sites.models import Site
 from django.contrib.syndication.views import Feed, add_domain
-from django.utils.feedgenerator import Atom1Feed
+from django.utils.feedgenerator import Atom1Feed, Rss201rev2Feed
 
 from haystack.query import SearchQuerySet
 from jsonresponse import to_json
@@ -653,11 +653,22 @@ class NewsItemDetailView(DetailView):
 
 newsitem = NewsItemDetailView.as_view()
 
+class RssCustomPodcastsFeed(Rss201rev2Feed):
+    def root_attributes(self):
+        attrs = super(RssCustomPodcastsFeed, self).root_attributes()
+        attrs['xmlns:dc'] = 'http://purl.org/dc/elements/1.1/'
+        return attrs
+
+    def add_item_elements(self, handler, item):
+        super(RssCustomPodcastsFeed, self).add_item_elements(handler, item)
+        for tag in item.get('tags') or []:
+            handler.addQuickElement('dc:subject', tag)
 
 class PodcastsFeed(Feed):
     title = 'Radio Panik - Podcasts'
     link = '/'
     description_template = 'feed/soundfile.html'
+    feed_type = RssCustomPodcastsFeed
 
     def items(self):
         return SoundFile.objects.select_related().filter(
@@ -688,6 +699,9 @@ class PodcastsFeed(Feed):
     def item_pubdate(self, item):
         return item.creation_timestamp
 
+    def item_extra_kwargs(self, item):
+        return {'tags': [x.name for x in item.episode.tags.all()]}
+
 podcasts_feed = PodcastsFeed()