diff --git a/config/urls.py b/config/urls.py index 35f278f..620dfdd 100644 --- a/config/urls.py +++ b/config/urls.py @@ -15,6 +15,7 @@ from mpicms.personal.views import ContactListView, RawContactListView from mpicms.events.views import ics_view from mpicms.publications.views import PublicationsFeedView +from mpicms.publications.views import PublicationsRssFeedView urlpatterns = [ @@ -48,7 +49,8 @@ path('contactsraw/', RawContactListView.as_view(), name='contactsraw'), path('events/ics', ics_view, name='ics'), - path('feed/last_publications', PublicationsFeedView.as_view()), + path('feed/last_publications_xml', PublicationsFeedView.as_view()), + path('feed/last_publications', PublicationsRssFeedView.as_view()), ] + static( settings.MEDIA_URL, document_root=settings.MEDIA_ROOT ) diff --git a/mpicms/publications/views.py b/mpicms/publications/views.py index 2948480..fc3dd5e 100644 --- a/mpicms/publications/views.py +++ b/mpicms/publications/views.py @@ -33,3 +33,42 @@ def get(self, request, *args, **kwargs): response.write(' \n') response.write('\n') return response + + +class PublicationsRssFeedView(View): + + # IMPORTANT: Quick hack to get experiments going, This assumes, that the + # editor of the publications is trusted to put only expected values into the + # fields. + # + # 2DO: check for legal XML characters everywhere https://www.w3.org/TR/xml/#NT-Char + # 2DO: Put HTML content in ? + # If we don't make DOI into element: + # 2DO: escape invalid characterds in attribute ( " & < > ) + # If we don't convert the rich text fields to plain text maybe: + # 2DO: Remove

editor artefacts from rich text fields ("

blabla

") ? + # 2DO: Remove from source fields ("

Mol Cell.

") ? + # maybe use xml.dom for that? + # 2DO: ... ? + + def get(self, request, *args, **kwargs): + response = HttpResponse(content_type="application/rss+xml; charset=utf-8") + response.write('\n') + response.write('\n') + response.write(' \n') + # the next three elements are required https://www.rssboard.org/rss-specification + response.write(' Last Three Publications\n') + response.write(' https://intranet.molgen.mpg.de/\n') + response.write(' The last three publications published on the Intranet site\n') + for item in Publication.objects.order_by('sort_order')[:3]: + # all elements optional, but either title or description allowed + response.write(f' \n') + response.write(f' {item.title}\n') + response.write(f' {item.authors}\n') + response.write(f' {item.title}\n') + response.write(f' {item.source}\n') + response.write(f' {item.groups}\n') + response.write(' \n') + response.write(' \n') + response.write('\n') + return response