2011-12-19 3 views
2

저는 RSS 애그리 게이터와 비슷한 방식으로 작동하는 응용 프로그램을 만들기 위해 파이썬을 사용하고 있습니다. 이 작업을 수행하려면 피드 파서 라이브러리를 사용하고 있습니다. 그러나 새로운 콘텐츠가 있는지 정확하게 감지 할 수있게하는 데 어려움을 겪고 있습니다.피드 파서를 사용하여 새 컨텐츠의 RSS 피드 확인

저는 주로 뉴스 관련 피드에 관심이 있습니다. 새 항목이 피드에 추가되었는지 확인하는 것 외에도 이전 기사가 업데이트되었는지 감지 할 수 있기를 원합니다. 아무도 내가 이것을 수행하기 위해 피드 파서를 어떻게 사용할 수 있는지 아는가? 단 하나의 필수 항목은 제목이나 설명 뿐이라는 것을 명심 하는가? 나는 link 요소가 항상 존재할 것이라고 생각하고 있습니다.

각 항목과 관련된 Feedparser의 "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 
>>> 

URL 또는 제목이 변경되면 (새 문서임을 나타냄) 변경되는 ID를 제공합니다.

기사 내용의 편집을 감지하려는 경우 기사의 내용을 다운로드하여 해시에 추가 할 수 있습니다.

전체 페이지를 끌어 내려고하려는 경우 대역폭을 절약하고 타격을 줄만한 사이트에 조금이라도 익숙하려면 HTTP conditional GET with Python에 대해 알아야 할 수도 있습니다.

+0

우수. 고마워요. 지금 가지고있는 문제는 동일한 콘텐츠를 읽을 때마다 다른 해시 값을 계속 유지한다는 것입니다. 는이 같은 내용을 얻을 :. '함량 = urllib.urlopen는 (항목 [0] [ "링크"]) 판독() ' 다음 I의 해시 값을 계산한다. 위 내용을 사용하여 두 번째 동일한 내용을 읽으면 이번에는 내용이 동일해야하므로 다른 해시 값을 얻지 않을 것입니다. 내가 이것을 막을 수있는 방법에 대한 단서? – user1106610

+1

전체 웹 페이지가로드마다 다를 수있는 데에는 여러 가지 이유가있을 수 있습니다. 예를 들어, 정기적으로 업데이트되는 사이드 바에 포함 된 새로운 기사 목록이있을 수 있습니다. 그것은 "내용"의 정의에 달려 있습니다. 페이지의 HTML을 자세히 살펴보고 게시물의 본문을 찾아 콘텐츠로 사용해야합니다. –