如何在Django应用程序中检查RSS源是否已更新?

时间:2016-04-28 14:40:18

标签: python django rss feedparser

在我的 models.py 中,我有以下内容:

class Feed(models.Model):
    rss_url = models.URLField()
    updated = models.DateTimeField(blank=True, null=True)

    def save(self, *args, **kwargs):
        get_last_updated_date(self) # Get updated date
        super(Feed, self).save(*args, **kwargs)
        generate_content_from_feed(self) # Generating the content

class Content(models.Model):
    title = models.CharField(max_length=500)
    link = models.URLField()
    feed = models.ForeignKey(Feed, related_name='content_feed')

在RSS 2.0规范中,通道(feed)的lastBuildDate不是必需的。这就是为什么我的更新字段可以为空并且为空。

您可能已经注意到,我的保存功能中有2个方法。

get_last_updated_date 方法使用Feed的网址查看是否存在lastBuildDate,如果存在,则在使用pytz校正时区后将其设置为我的更新字段。 / p>

generate_content_from_feed 方法使用Feed的网址从该频道获取项目并创建内容对象。我需要在super(Feed,self).save(* args,** kwargs)之后调用它,因为Content对象'必须将feed字段设置为调用该方法的字段。因此,在保存Feed本身之前无法完成此操作。

现在我的问题是,如果更新的日期与RSS源中的lastBuildDate匹配,那么我不想调用 generate_content_from_feed 方法,这样一来,事情会更有效率。但是,我实际上是在内容生成之前设置更新日期,因此如果lastBuildDate存在,它将始终与更新的字段匹配,并且不会生成任何内容。如果我在超级之后放置了更新日期函数,则必须再次调用save,从而导致无限循环。

我正在考虑做这样的事情:

if self.updated == None:
    generate content
elif self.updated < [[lastBuildDate]]:
    generate content
else:
    dont generate content

我不知道如何实现这一点,因为我很难理解程序的流程。

所以有人可以帮我解决我的问题吗?我知道这很复杂,但希望我能够恰当地表达出来。

另外我不确定self.updated == None是否有效用于检查日期是否为空并且使用&lt;检查两个日期之间差异的运算符是否有效。如果有人告诉我,我会非常感激。

感谢。如果有人感兴趣,我也会使用feed解析器进行解析。

0 个答案:

没有答案