2011-12-19 40 views
2

我正在使用python構建一個以類似於RSS聚合器的方式工作的應用程序。我正在使用feedparser庫來執行此操作。但是,我正在努力讓程序正確檢測是否有新內容。使用feedparser檢查新內容的RSS訂閱源

我主要關注新聞相關的提要。除了查看是否有新項目已添加到Feed中,我還希望能夠檢測到以前的文章是否已更新。是否有人知道我可以如何使用feedparser來做到這一點,銘記唯一的必修項目元素是標題或描述?我願意假設鏈接元素也會一直存在。

Feedparser與每個項目關聯的「id」屬性似乎只是鏈接到文章,因此這可能有助於檢測新的文章,但不會檢測到以前文章的更新,因爲這些文章的「id」會沒有改變。

我看了以前的線程在stackoverflow和一些人建議散列的內容或哈希標題+網址,但我不確定這意味着什麼或如何一個人會去它(如果的確是這樣的權利方法)。

回答

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的信息,以便節省帶寬並對您正在訪問的網站稍微友好些。

+0

非常好。謝謝你。我現在遇到的問題是每次讀取相同的內容時都會收到不同的散列值。 我得到這樣的內容: 'content = urllib.urlopen(items [0] [「link」]).read()' 然後我計算散列值。如果我使用上述第二次讀取相同的內容,這次我將得到不同的散列值,因爲內容應該是相同的,所以不應該發生。有關我如何防止這種情況的任何線索? – user1106610 2011-12-20 15:40:17

+1

可能有很多原因,爲什麼整個網頁可能因負載不同而不同。例如,可能會定期更新側邊欄中包含的新文章列表。這歸結於「內容」的定義。您需要深入查看頁面的HTML,找到帖子的主體並將其用作您的內容。 – 2011-12-20 16:06:35