generating feed
This commit is contained in:
@ -2,3 +2,4 @@ __version__ = '0.1.0'
|
||||
|
||||
from nebula_rss.nebula_video import NebulaVideo
|
||||
from nebula_rss.nebula_loader import NebulaLoader
|
||||
from nebula_rss.nebula_feed import NebulaFeed
|
||||
|
36
nebula_rss/nebula_feed.py
Normal file
36
nebula_rss/nebula_feed.py
Normal file
@ -0,0 +1,36 @@
|
||||
from feedgen.feed import FeedGenerator
|
||||
from nebula_rss import NebulaLoader
|
||||
|
||||
|
||||
class NebulaFeed:
|
||||
def __init__(self, nebula_loader: NebulaLoader, feed_url: str):
|
||||
self.nebula_loader = nebula_loader
|
||||
self.feed_url = feed_url
|
||||
|
||||
def generate(self, format: str = 'atom') -> str:
|
||||
videos = self.nebula_loader.load()
|
||||
fg = FeedGenerator()
|
||||
fg.id(self.feed_url)
|
||||
fg.title('Nebula subscriptions')
|
||||
fg.logo('https://nebula.app/apple-touch-icon.png')
|
||||
fg.subtitle('Your subscribed videos')
|
||||
fg.link(href=self.feed_url, rel='self')
|
||||
fg.language('en')
|
||||
|
||||
for video in videos:
|
||||
fe = fg.add_entry()
|
||||
fe.id(video.url)
|
||||
fe.title(video.title)
|
||||
fe.link(href=video.url)
|
||||
fe.author({'name': video.creator, 'email': 'Unknown'}) # Email is required for RSS format, but is not known
|
||||
fe.enclosure(url=video.url)
|
||||
fe.summary(f'New video by {video.creator}: {video.title}')
|
||||
fe.published(video.release_at)
|
||||
feed = ''
|
||||
if format == 'atom':
|
||||
feed = fg.atom_str(pretty=True)
|
||||
elif format == 'rss':
|
||||
feed = fg.rss_str(pretty=True)
|
||||
else:
|
||||
raise Exception(f'Unknown format: "{format}". Use "atom" or "rss')
|
||||
return feed
|
Reference in New Issue
Block a user