|
@@ -0,0 +1,43 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+from __future__ import unicode_literals
|
|
|
+
|
|
|
+import feedparser
|
|
|
+import HTMLParser
|
|
|
+
|
|
|
+from django.views.decorators.cache import cache_page
|
|
|
+from django.template import RequestContext
|
|
|
+from django.shortcuts import render_to_response
|
|
|
+from django.http import HttpResponse, HttpResponseNotFound, HttpResponseServerError
|
|
|
+from django.conf import settings
|
|
|
+
|
|
|
+
|
|
|
+@cache_page(60 * 60 * 24) # Cache 24h
|
|
|
+def feed(request, feed_name):
|
|
|
+ feeds = settings.FEEDS
|
|
|
+ feed = None
|
|
|
+ # Recherce le flux passé en paramètre dans les flux définis dans settings
|
|
|
+ for feed_search in feeds:
|
|
|
+ if (feed_search[0] == feed_name):
|
|
|
+ feed = feed_search
|
|
|
+ break
|
|
|
+
|
|
|
+ # Si le flux n'a pas été trouvé ou qu'il n'y a pas d'URL donnée, renvoi 404
|
|
|
+ if not feed or len(feed)<2 or not feed[1]:
|
|
|
+ return HttpResponseNotFound('')
|
|
|
+ # Sinon récupère les informations (url et limit)
|
|
|
+ else:
|
|
|
+ feed_url = feed[1]
|
|
|
+ if len(feed) >=3:
|
|
|
+ limit = feed[2]
|
|
|
+ else:
|
|
|
+ limit = 3
|
|
|
+
|
|
|
+ try:
|
|
|
+ feed = feedparser.parse(feed_url)
|
|
|
+ entries = feed.entries[:limit]
|
|
|
+
|
|
|
+ return render_to_response('fragments/feed.html',
|
|
|
+ {'feed_entries': entries},
|
|
|
+ context_instance=RequestContext(request))
|
|
|
+ except:
|
|
|
+ return HttpResponseServerError('')
|