Ciao a tutti.
In questo articolo vorrei mostrare come creare un custom feed in Django, utilizzando il Django Syndication Feed Framework 1.2 o superiore.
Mi è capitato di dover creare un XML con alcuni tag in più per ogni item del feed. In particolare, oltre ai soliti tag presenti in un feed di tipo RSS, ho aggiunto i tag
<short_description/>
ed
<image/>
Leggendo la documentazione ufficiale del framework, viene consigliato di creare un custom feed generator, ma il processo non è molto chiaro.
Vediamo dunque passo passo come risolvere il tutto.
Creiamo innanzitutto un custom feed generator.
Questo generatore non dovrà fare altro che produrre lo stesso XML che produrrebbe il generatore di default del framework e per ogni item della lista aggiungere i nuovi tag.
1 2 3 4 5 | class CustomFeedGenerator(Rss201rev2Feed): |
Vediamo che il generator non fa altro che richiamare il metodo add_item_elements(handler, item) della sua superclasse e poi aggiungere i nuovi tag per ogni item dell’XML.
Notiamo che i valori che andrà ad inserire nei tag image e short_description dovranno essere presenti nel dizionario item, passato come argomento.
Creiamo dunque la nostra classe CustomFeed che eredita dalla classe Feed e vediamo come istruirla ad usare il nostro CustomFeedGenerator e come inserirà i nuovi valori nel dizionario item.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class CustomFeed(Feed): |
CustomFeed è molto simile ai vari feed a cui siamo abituati. Le uniche novità sono rappresentate dalla dichiarazione del tipo di feed
feed_type = CustomFeedGenerator
e dal metodo
item_extra_kwargs
, in grado di appendere eventuali nuovi valori nel dizionario item, ottenendo il risultato desiderato.