Browse Source

Improve feeds by removing static feeds settings

Fabs 10 years ago
parent
commit
a8f7ea2f06
4 changed files with 44 additions and 51 deletions
  1. 9 5
      coin/members/templates/members/index.html
  2. 3 4
      coin/settings.py
  3. 2 3
      coin/urls.py
  4. 30 39
      coin/views.py

+ 9 - 5
coin/members/templates/members/index.html

@@ -18,7 +18,7 @@
     </div>
     </div>
     <div class="large-6 columns">
     <div class="large-6 columns">
         <h3>News de nous</h3>
         <h3>News de nous</h3>
-        <div class="panel" id="feed_provider"><i class="fa fa-spinner fa-spin"></i>
+        <div class="panel" id="feed_isp"><i class="fa fa-spinner fa-spin"></i>
  Chargement en cours</div>
  Chargement en cours</div>
     </div>
     </div>
     <div class="large-6 columns">
     <div class="large-6 columns">
@@ -36,15 +36,19 @@
     <script>
     <script>
     $(function() {
     $(function() {
         $.ajax({
         $.ajax({
-            url: "{% url 'feed_provider' %}",
+            url: "{% url 'feed' feed_name='isp' %}",
         }).done(function(html) {
         }).done(function(html) {
-            $('#feed_provider').html(html);
+            $('#feed_isp').html(html);
+        }).fail(function() {
+            $('#feed_ffdn').html('Erreur lors du chargement du flux');
         });
         });
         $.ajax({
         $.ajax({
-            url: "{% url 'feed_ffdn' %}",
+            url: "{% url 'feed' feed_name='ffdn' %}",
         }).done(function(html) {
         }).done(function(html) {
             $('#feed_ffdn').html(html);
             $('#feed_ffdn').html(html);
+        }).fail(function() {
+            $('#feed_ffdn').html('Erreur lors du chargement du flux');
         });
         });
     });
     });
     </script>
     </script>
-{% endblock js %}
+{% endblock js %}

+ 3 - 4
coin/settings.py

@@ -251,10 +251,9 @@ MEMBER_DEFAULT_COTISATION = 20
 SESSION_COOKIE_AGE = 7200
 SESSION_COOKIE_AGE = 7200
 
 
 # RSS/Atom feeds to display on dashboard
 # RSS/Atom feeds to display on dashboard
-FEED_PROVIDER_URL = 'http://www.illyse.net/feed/'
-FEED_PROVIDER_MAX_ENTRIES = 3
-FEED_FFDN_URL = 'http://www.ffdn.org/fr/rss.xml'
-FEED_FFDN_MAC_ENTRIES = FEED_PROVIDER_MAX_ENTRIES
+# feed name (used in template), url, max entries to display
+FEEDS = (('isp', 'http://www.illysenet/feed/', 3),
+         ('ffdn', 'http://www.ffdn.org/fr/rss.xml', 3))
 
 
 # Surcharge les paramètres en utilisant le fichier settings_local.py
 # Surcharge les paramètres en utilisant le fichier settings_local.py
 try:
 try:

+ 2 - 3
coin/urls.py

@@ -30,9 +30,8 @@ urlpatterns = patterns(
     url(r'^admin/', include(admin.site.urls)),
     url(r'^admin/', include(admin.site.urls)),
 
 
     # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
     # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
-    
-    url(r'^feed_provider/', views.feed_provider, name='feed_provider'),
-    url(r'^feed_ffdn/', views.feed_ffdn, name='feed_ffdn'),
+
+    url(r'^feed/(?P<feed_name>.+)', views.feed, name='feed'),
 
 
     url(r'^autocomplete/', include('autocomplete_light.urls')),
     url(r'^autocomplete/', include('autocomplete_light.urls')),
 
 

+ 30 - 39
coin/views.py

@@ -1,52 +1,43 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
 import feedparser
 import feedparser
 import HTMLParser
 import HTMLParser
 
 
 from django.views.decorators.cache import cache_page
 from django.views.decorators.cache import cache_page
 from django.template import RequestContext
 from django.template import RequestContext
 from django.shortcuts import render_to_response
 from django.shortcuts import render_to_response
-from django.http import HttpResponse
+from django.http import HttpResponse, HttpResponseNotFound, HttpResponseServerError
 from django.conf import settings
 from django.conf import settings
 
 
 
 
-def feed_provider(request):
-    feed_url = ''
-    limit = 3
-    try:
-        if settings.FEED_PROVIDER_URL:
-            feed_url = settings.FEED_PROVIDER_URL
-        if settings.FEED_PROVIDER_MAX_ENTRIES:
-            limit = settings.FEED_PROVIDER_MAX_ENTRIES
-    except:
-        pass
-
-    return feed(request, feed_url, limit)
-
-
-def feed_ffdn(request):
-    feed_url = ''
-    limit = 3
-    try:
-        if settings.FEED_FFDN_URL:
-            feed_url = settings.FEED_FFDN_URL
-        if settings.FEED_FFDN_MAX_ENTRIES:
-            limit = settings.FEED_FFDN_MAX_ENTRIES
-    except:
-        pass
-
-    return feed(request, feed_url, limit)
-
-
 @cache_page(60 * 60 * 24) # Cache 24h
 @cache_page(60 * 60 * 24) # Cache 24h
-def feed(request, feed_url, limit):
+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:
     try:
-        if feed_url:
-            feed = feedparser.parse(feed_url)
-            entries = feed.entries[:limit]
+        feed = feedparser.parse(feed_url)
+        entries = feed.entries[:limit]
 
 
-            return render_to_response('fragments/feed.html',
-                                      {'feed_entries': entries},
-                                      context_instance=RequestContext(request))
+        return render_to_response('fragments/feed.html',
+                                  {'feed_entries': entries},
+                                  context_instance=RequestContext(request))
     except:
     except:
-        pass
-
-    return HttpResponse('')
+        return HttpResponseServerError('')