Node.js 기반의 RSS 및 Atom 피드 파서, @rowanmanning/feed-parser
요약
Node.js 기반의 @rowanmanning/feed-parser는 RSS 및 Atom 피드를 파싱하기 위한 강력하고 탄력적인 라이브러리입니다. 이 도구는 실제 세계의 다양한 피드(약 40개)를 대상으로 자동화 테스트를 거쳐 신뢰성을 높였으며, 사용 편의성과 관용성(leniency)에 중점을 두었습니다.
핵심 포인트
- Node.js 환경에서 RSS/Atom 피드를 파싱할 수 있습니다.
- 실제 피드 데이터를 기반으로 광범위하게 테스트되었습니다.
- 관용적인 파싱 방식을 채택하여 다양한 형식의 피드를 지원합니다.
@rowanmanning/feed-parser
RSS와 Atom 피드를 위한, 잘 테스트되고 탄력적인 Node.js 파서입니다.
목차
소개
이것은 RSS 및 Atom 피드를 위한 Node.js 기반의 피드 파서입니다. 이 프로젝트는 다음과 같은 목표를 가지고 있습니다:
-
실제 세계의 피드를 대상으로 자동화 테스트 실행. 현재 Sample Feeds을 통해 약 40개의 피드를 대상으로 테스트됩니다. 이는 단순히 사양(specification)뿐만 아니라 실제 피드도 지원함을 보장합니다.
-
위의 점과 관련하여, 피드 파싱 시 가능한 한 관용적(lenient)으로 작동하는 것입니다.
-
사용 중단 예정인 버전의 지원을 중단하는 것을 포함하여 최신 Node.js 버전을 유지합니다.
-
node-feedparser(https://github.com/danmactough/node-feedparser)의 훌륭한 부분들, 예를 들어 상대 URL 해결 기능과의 호환성을 유지합니다.
요구사항
이 라이브러리를 실행하려면 다음이 필요합니다:
- Node.js 20 이상
사용법
npm을 통해 설치하세요:
npm install @rowanmanning/feed-parser
코드에 라이브러리를 로드합니다:
const { parseFeed } = require('@rowanmanning/feed-parser');
// 또는
...
parseFeed 함수를 사용하여 RSS 또는 Atom 피드를 문자열로 파싱할 수 있습니다. 반환 값은 피드의 객체 표현입니다:
const feed = parseFeed('<channel> etc. </channel>');
console.log(feed.title);
유효성 허용 (leniency)을 시도하지만, 데이터를 추출할 수 없는 경우 code 속성이 INVALID_FEED로 설정된 오류가 발생합니다.
이 라이브러리는 URL을 통해 피드를 파싱하지 않습니다. fetch를 사용하면 상대적으로 쉽게 처리할 수 있습니다:
const response = await fetch('https://github.com/rowanmanning/feed-parser/releases.atom');
const feed = parseFeed(await response.text());
파싱된 피드 (Parsed feed)
parseFeed가 반환하는 feed 객체는 다음 속성들을 가집니다.
Feed
RSS 또는 Atom 피드를 나타냅니다.
<table> <tr> <th>속성 (Property)</th> <th>타입 (Type)</th> <th>설명 (Notes)</th> </tr> <tr> <td><code>authors</code></td> <td><code><a href="#feedauthor">FeedAuthor</a>[]</code></td> <td>피드 작성자들. 항상 배열이지만, 작성자를 찾지 못한 경우 비어 있을 수 있습니다.</td> </tr> <tr> <td><code>categories</code></td> <td><code><a href="#feedcategory">FeedCategory</a>[]</code></td> <td>피드 카테고리들.</div>항상 배열이지만 카테고리가 발견되지 않으면 비어 있을 수 있다.</td>
</tr>
<tr>
<td><code class="row-header">copyright</code></td>
<td><code class="row-type">string | null</code></td>
<td>피드의 저작권 고지.</td>
</tr>
<tr>
<td><code class="row-header">description</code></td>
<td><code class="row-type">string | null</code></td>
<td>피드에 대한 간략한 설명.</td>
</tr>
<tr>
<td><code class="row-header">generator</code></td>
<td><code class="row-type"><a href="#feedgenerator">FeedGenerator</a> | null</code></td>
<td>피드를 생성한 소프트웨어.</td>
</tr>
<tr>
<td><code class="row-header">image</code></td>
<td><code class="row-type"><a href="#feedimage">FeedImage</a> | null</code></td>
<td>피드를 나타내는 이미지.</td>
</tr>
<tr>
<td><code class="row-header">items</code></td>
<td><code class="row-type"><a href="#feeditem">FeedItem</a>[]</code></td>
<td>피드의 콘텐츠 항목들. 항상 배열이지만 항목이 발견되지 않으면 비어 있을 수 있다.</td>
</tr>
<tr>
<td><code class="row-header">language</code></td>
<td><code class="row-type">string | null</code></td>
<td>피드가 작성된 언어.</td>
</tr>
<tr>
<td><code class="row-header">meta</code></td>
<td><code class="row-type"><a href="#feedmeta">FeedMeta</a></code></td>
<td>피드 형식에 대한 메타 정보.</td>
</tr>
<tr>
<td><code class="row-header">published</code></td>
<td><code class="row-type">Date | null</code></td>
<td>피드가 마지막으로 게시된 날짜.</td>
</tr>
<tr>
<td><code class="row-header">self</code></td>
<td><code class="row-type">string | null</code></td>
<td>피드 자체를 가리키는 URL.</td>
</tr>
<tr>
<td><code class="row-header">title</code></td>
<td><code class="row-type">string | null</code></td>
<td>피드의 이름.</td>
</tr>
<tr>
<td><code class="row-header">updated</code></td>
<td><code class="row-type">Date | null</code></td>
<td>피드가 마지막으로 업데이트된 날짜.</td>
</tr>
<tr>
<td><code class="row-header">url</code></td>
<td class="row-type">string | null</td>
<td></td>
</tr>
FeedAuthor
<table>
<tr>
<th>속성(Property)</th>
<th>유형(Type)</th>
<th>설명(Notes)</th>
</tr>
<tr>
<td><code>email</code></td>
<td><code>string | null</code></td>
<td>작성자의 이메일 주소입니다.</td>
</tr>
<tr>
<td><code>name</code></td>
<td><code>string | null</code></td>
<td>작성자의 이름입니다.</td>
</tr>
<tr>
<td><code>url</code></td>
<td><code>string | null</code></td>
<td>인터넷상에서 작성자를 나타내는 URL입니다.</td>
</tr>
</table>
FeedCategory
Feed 또는 FeedItem의 콘텐츠 카테고리를 나타냅니다.
FeedGenerator
Feed를 생성한 소프트웨어를 나타냅니다.
FeedImage
Feed에 포함되는 이미지를 나타냅니다.
FeedItem
Feed 내의 RSS 항목 또는 Atom 엔트리를 나타냅니다.
항상 배열 형태이지만, 항목이 발견되지 않으면 비어 있을 수 있습니다.</td>
</tr>
<tr>
<td><code>published</code></td>
<td><code>Date | null</code></td>
<td>피드 항목이 마지막으로 게시된 날짜입니다.</td>
</tr>
<tr>
<td><code>title</code></td>
<td><code>string | null</code></td>
<td>피드 항목의 제목입니다.</td>
</tr>
<tr>
<td><code>updated</code></td>
<td><code>Date | null</code></td>
<td>피드 항목이 마지막으로 업데이트된 날짜입니다.</td>
</tr>
<tr>
<td><code>url</code></td>
<td><code>string | null</code></td>
<td>이 피드 항목을 나타내는 HTML 웹 페이지로 연결되는 URL입니다.</td>
</tr>
FeedItemMedia
FeedItem에 첨부된 미디어 조각을 나타냅니다.
FeedMeta
Feed에 대한 메타 정보를 나타냅니다.
지원되는 피드 형식
표준(Standards)
다음 표준을 준수하는 피드는 지원되며, 대부분의 속성이 파싱됩니다:
- Atom 1.0
- Atom 0.3 (규격은 없으나 예시는 여기에 있습니다)
- RSS 2.0
- RSS 0.9
- RDF Site Summary 1.0
다음 XML 네임스페이스도 파싱되며, 이를 구현하는 RSS 피드의 경우 더 많은 데이터가 파싱됩니다:
- DublinCore (예:
dc:creator) - iTunes Podcast RSS feed (예:
itunes:author)
관용성(Leniency)
AI 자동 생성 콘텐츠
본 콘텐츠는 개발 자료 GitHub · ec1fbd44의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기