首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚合源视图RSS到文件

聚合源视图RSS到文件
EN

Stack Overflow用户
提问于 2022-02-09 03:07:35
回答 2查看 55关注 0票数 0

我正在使用django作为我的播客的网络前端。我使用CDN来托管我所有的媒体,最近我想要同一个来托管我的RSS,而不是直接使用django.

当前的设置有一些基本的已知原语:

代码语言:javascript
复制
    path('podcast.xml', SubscribeFeed(), name='episode_feed'),

一些附加的上下文;SubscribeFeed是一个基于https://docs.djangoproject.com/en/4.0/ref/contrib/syndication/#custom-feed-generators的联合源(https://github.com/django/django/blob/main/django/contrib/syndication/views.py#L27)

看起来有点像:

代码语言:javascript
复制
class iTunesFeed(Rss201rev2Feed):
    content_type = 'application/xml; charset=utf-8'

    def root_attributes(self):
        attrs = super().root_attributes()
        attrs['xmlns:itunes'] = 'http://www.itunes.com/dtds/podcast-1.0.dtd'
        return attrs
    < ... Ripped right from the custom feed generators with a ton of extra elements for the specific podcast category and such ... >

 class SubscribeFeed(Feed):
    title = "My Cool Podcast" 
    description = About.objects.first().about
    author_email = "podcast@gmail.com"
    author_name = "John Doe" 
    feed_type = iTunesFeed

    def item_pubdate(self, item):
        return item.pub_date
    < ... More stuff that isn't relevant ... >

只是明确地说,这个视图与Django完美地工作在一起,服务于播客RSS.,它可以在所有主要的平台上工作,而且非常好。

我的问题/问题是:我想生成/呈现这个视图到一个文本文件,目的是;我在CDN上托管媒体,我也将这个RSS放在一个单独的feeds.mypodcast.com CDN上。通过这种方式,django应用程序可以关闭,但提要和媒体仍然可以通过CDN访问。django应用程序只在关键路径上;插曲描述、联系人表单、网页ui插曲浏览等等。

我已经在跑芹菜,在一定的时间间隔内发布剧集,所以我的计划如下:

在模型save()函数之后创建一个异步函数

  • 生成文件或字符串的新提要。
  • 比较CDN上的内容
  • 替换CDN RSS提要文件并使CDN缓存无效。

步骤2和步骤3非常简单,但是我很难生成一个文件。

我尝试过的事情:

  • “模拟”请求并运行馈送 podcast_feed.get_feed(podcast_feed.items(), <mocked request object>) **这当然“有效”,但是调用我自己的REST资源感觉很糟糕,也不是很好。
  • 创建一个“隐藏的”URL调度程序。然后,在芹菜节拍时间表上,我点击了我的芹菜任务的URL。通过请求生成视图,在CDN上进行比较和重新分发。**这也“有效”,但同样感觉很糟糕。
  • 编写我自己的get_feed()类型的函数。**这并不是真的起作用。阅读源代码后,我发现它相当依赖于一个有效的请求,而且我不认为我在架构上做的是正确的。(创建我自己的馈电发生器)
  • render_to_string,但用于聚合提要。**这几乎立即停止。在一个正常的视图上工作得很好,但在提要上却找不到它。

我把头撞在这上面已经有一段时间了。“隐藏”调度似乎是最安全、最有效的攻击,但我更愿意以正确的方式进行。

我真正想要的是建筑指导。怎样才是正确的方法?我希望找到一些明显的东西,比如render_to_string,但是用于联合提要。实现我自己的feedgenerator不是很好。

简单地解决用例的最佳途径是什么;将合并源视图呈现为文本文件

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-11 08:05:52

我之所以选择我的答案,是因为我对问题集有更多的思考。Django的MVT/MVC模式确实不错,但我想我是想让它做一些它不应该做的事情。

如果我想从Django应用程序本身提供RSS提要,那么从模板ala中生成一个视图是很棒的。但正如问题中所述,我想将这个RSS提要写到某个远程CDN上。

我用rfeed编写了自己的包装器(注意: pypi中的包装器是一个旧的叉子……)。它把我所有的情节和播客元数据模型都拉进来,把它们输入到条目中,然后输入到提要中。

然后,我在模型保存(或计划的插播发布)上编写了一个简单的异步任务,它只生成rfeed RSS提要,创建S3对象,区分S3中的内容,然后有条件地推送S3并使cloudfront无效。

我非常喜欢这种方法,因为现在我的django应用程序会发生一些不好的事情,离线。所有的媒体和RSS现在都在CDN,该网站只是用来展示笔记,联系表格,关于我们,简单的事情。现在关键的问题是云提供商的问题。

票数 0
EN

Stack Overflow用户

发布于 2022-02-09 14:10:12

您可以在单独的视图中这样做:

代码语言:javascript
复制
   def rss_feed_to_file():
   
      response = SubscribeFeed()
      
      # response is a HttpResponse object
      # response.content contains the feed content which you could then save as whatever you like

这能回答你的问题吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71043536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档