-
RSS, Πλανήτες και Django
-
Δυστυχώς είναι συχνό φαινόμενο να εμφανίζονται διπλές μερικές καταχωρήσεις στους Πλανήτες, όπως συμβαίνει για παράδειγμα στο planet.ellak.gr με το feed (ροή) του django.gr weblog.
Αυτό από ότι κατάλαβα συμβαίνει με τις ροές RSS που δεν έχουν πεδία
pubDate
, τις οποίες το λογισμικό planet δε μεταχειρίζεται σωστά. Αν κάτι αλλάξει σε μία καταχώρηση μιας τέτοιας ροής, τότε το planet υποθέτει ότι είναι νέα καταχώρηση, την αναρτά, και δε σβήνει την παλιά γιατί είναι ήδη δημοσιευμένη. Αυτό που θα έπρεπε να κάνει όμως είναι να συγκρίνει κάπως τις δύο καταχωρήσεις αν δεν υπάρχει το pubDate, πχ. ελέγχοντας το<link>
tag τους πριν αποφανθεί ότι είναι διαφορετικές καταχωρήσεις. Μια και είναι δημοφιλές λογισμικό, θέλω να πιστεύω ότι η λειτουργικότητα αυτή είναι σχεδιαστική απόφαση κι όχι κάποιο σφάλμα (it’s a feature, not a bug).Από την πλευρά μας αυτό που μπορούμε να κάνουμε είναι απλά να προσθέσουμε το πεδίο
pubDate
στα feed που δεν το έχουν. Στα RSS 2.0 και Atom τουλάχιστον, γιατί αν διαθέτουμε μόνο ένα παλαιολιθικό RSS 0.92, δεν έχουμε τέτοια επιλογή χωρίς να κάνουμε τη σύνταξη της ροής μη-έγκυρη ως προς το πρότυπο.Το django.gr είναι γραμμένο σε Django (προφανώς), και ο κώδικας που παράγει τη ροή RSS είναι ο παρακάτω:
class WeblogEntryFeed(Feed): title = "The Greek Django User Group weblog" link = "http://www.django.gr/weblog/" description = "Latest news about Django, the Python Web framework," + \ " from the Greek Django User Group." def items(self): return Entry.objects.filter(pub_date__lte=datetime.datetime.now())[:10]
Για να μορφοποιήσουμε τη ροή ώστε να περιέχει για κάθε άρθρο και την ημερομηνία δημοσίευσης, προσθέτουμε τα εξής:
def item_pubdate(self, item): return item.pub_date
Αυτά.