我正在使用python构建一个应用程序,其功能与RSS聚合器类似。我正在使用feedparser库来执行此操作。但是,我很难让程序正确检测是否有新内容。
我主要关注与新闻相关的供稿。除了查看是否已将新项添加到Feed之外,我还希望能够检测先前的文章是否已更新。有没有人知道如何使用feedparser来做到这一点,记住唯一必须的项目元素是标题或描述?我愿意假设link元素也会一直存在。
与每个项目关联的Feedparser的“id”属性似乎只是文章的链接,因此这可能有助于检测Feed上的新文章,但不会检测以前文章的更新,因为这些文章的“id”不会已经改变了。
我查看了stackoverflow上的先前线程,有些人建议散列内容或散列标题+ url,但我不确定这意味着什么或者如何实现(如果确实是正确的方法) )。
答案 0 :(得分:4)
在此上下文中散列意味着计算较短的值来表示url和title的每个组合。当您使用散列函数确保碰撞的几率(两个不同的项生成相同的值)很低时,此方法有效。
传统上,MD5对此来说是一个很好的功能(但要注意不要将它用于加密操作 - 为此目的不推荐使用它。)
例如。
>>> import hashlib
>>> url = "http://www.example.com/article/001"
>>> title = "The Article's Title"
>>> id = hashlib.md5(url + title).hexdigest()
>>> print id
785cbba05a2929a9f76a06d834140439
>>>
这将提供一个ID,如果URL或标题发生变化,它将发生变化 - 表明它是一篇新文章。
如果您还想检测对文章内容的修改,可以下载文章内容并将其添加到哈希值。
请注意,如果您打算将整个页面拉下来,您可能需要了解HTTP conditional GET with Python
以节省带宽,并且对您正在访问的网站更加友好。