40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
import html
|
|
|
|
from feedgen.feed import FeedGenerator
|
|
|
|
from db import collection
|
|
|
|
|
|
def get_items(collection_name, query={}):
|
|
return list(
|
|
collection(collection_name).find(query)
|
|
)
|
|
|
|
|
|
def get_feed():
|
|
events = get_items('events')
|
|
news = get_items('timeline', {'type': 'post'})
|
|
|
|
articles = sorted(events + news, key=lambda item: item['date'], reverse=True)
|
|
|
|
fg = FeedGenerator()
|
|
fg.id('art.shlisselburg.org')
|
|
fg.title('Шлиссельбургская ДХШ')
|
|
fg.link(href='https://art.shlisselburg.org', rel='alternate')
|
|
fg.logo('https://static.shlisselburg.org/art/graphics/favicon-144.png')
|
|
fg.link(href='https://art.shlisselburg.org/feed', rel='self')
|
|
fg.language('ru')
|
|
|
|
for article in articles:
|
|
content = html.unescape(article['post'])
|
|
article_id = article['id']
|
|
url = 'https://art.shlisselburg.org/article/{id}'.format(id=article_id)
|
|
|
|
fe = fg.add_entry()
|
|
fe.id(article_id)
|
|
fe.title(article['title'])
|
|
fe.content(content, None, 'CDATA')
|
|
fe.link({'href': url})
|
|
|
|
return fg.atom_str(pretty=True)
|