2010-11-30 3 views
1

새로운 레일스 애플리케이션에서 Ruby의 RSS 기능 (RSS :: Parser.parse)을 사용하고 있습니다. 앱은 내 통제 범위를 벗어난 여러 다른 RSS 피드 소스를 읽습니다 (다른 사용자가 만든 공개 피드). 액세스하려고하는 피드 중 하나는 항목 컬렉션 내의 설명 필드에 이스케이프 처리되지 않은 html을 포함합니다. 피드에 액세스 할 수 있지만 내보기의 설명 필드에 액세스하려고하면 아무 것도없는 것처럼 보입니다. 처음에는 원시 도우미를 사용해야한다고 생각했지만 최종 결과는 같습니다. 데이터를 요청하거나보기에 액세스해야하는 특별한 방법이 있습니까? 다음과 같이 내 컨트롤러의 코드는 다음과 같습니다RSS 피드에서 이스케이프 처리되지 않은 html을 액세스 할 수 없습니다.

@recent_activity = RSS::Parser.parse(open('http://someurl').read, false) 

나는 아마도 원시 XML 기능을 이용하여이 일을 만들 수있는 알과 RSS 객체를 우회

<% @recent_activity.items.each do |itm| %> 
    <%= raw itm.description %> 
<% end %> 

를 다음과 같이 내보기의 코드는 ,하지만 그 경로를 가기 전에 RSS 개체로 할 수있는 것이 있는지 확인하려고합니다.

미리 도움을 청하십시오.

답변

1

경험 한 바에 따르면 실제 피드는 RSS보다 훨씬 복잡합니다 : 파서는 처리 할 수 ​​있습니다. 내가 피드 무엇이든해야했다 이래로 동안이었다 그러나 이들은 마음에 와서 :

feedtools

feedparser

당신이 찾을 수있는 가장 큰 문제는 기 때문에 패키지가 제대로 모든 것을 할 것이다 피드를 만드는 사람들은 너무 독창적입니다. 설명과 제목 필드에는 모든 종류의 악마 같은 텍스트, HTML 및 인코딩 된 코드화되지 않은 코드가 있습니다. 필자는 자신의 파서를 작성하고 Nokogiri을 사용하여 원하지 않는 특정 태그를 제거하기 위해 loofah의 도움을 받아 무거운 물건을 처리했습니다. 나는 다양한 접근 방식으로 1000 개의 서로 다른 피드를 파싱했다. 백킹 데이터베이스를 사용하여 마지막 액세스를 추적하고, etags를 작성하고, 말하기에 새로운 것이 없으면 사이트를 죽이지 않고 모든 의로운 일을하는 등의 " 이 시간이나 일 사이에 나를 귀찮게하지 말라. "

1

RSS::Parser 대신 feedzirra을 사용해보세요. 난 아무 문제없이 약 200 다른 피드에 당겨 응용 프로그램에서 그것을 사용합니다. 아, 그리고 Nokogiri를 사용하기 때문에 빠릅니다.

FeedZirra 설명 : 고질라처럼 인터넷을 취급하는 피드 가져 오기 및 파싱 라이브러리는 일본을 지배합니다. 그것은 모두를 지배하고 먹습니다.

관련 문제