Node.js

RSS Parse

일태우 2021. 2. 24. 22:34

RSS 피드를 파싱 해보자

 

rss-parser 라이브러리를 사용하겠다. 이유는 작고 가볍고 편하다.

그리고 주간 다운로드 수가 현재 17만을 육박한다.(등록일 기준)

www.npmjs.com/package/rss-parser

 

rss-parser

A lightweight RSS parser, for Node and the browser

www.npmjs.com

 

node v14.15.0 환경에서 실시

 

1. 설치

npm install --save rss-parser

2. 사용

샘플로 연합뉴스의 최신피드를 파싱할 예정, 최대한 샘플 코드를 따라해보았다.

(샘플주소: www.yonhapnewstv.co.kr/browse/feed/)

import RssParser from 'rss-parser'

async parseRss () {
  const rssParser = new RssParser()
  const feed = await rssParser.parseURL('https://www.yonhapnewstv.co.kr/browse/feed')

  feed.items.forEach((item) => {
  	console.log(item.title + ':' + item.link)
  })
}

코드를 보면 엄청 심플하면서 가벼움이 느껴지고 직관적이다.(직관적인 코드는 사랑해야 한다)

parseURL 메서드에 rss주소를 넘겨주면 끝 async/await 기반으로 작동한다.

 

3. 결과

깔끔하게 파싱되었다.

 

이제 좀더 들어가 내용도 파싱해보자, 근데 연합뉴스의 내용부분의 필드네임을 보면

content:encoded라고 되어있다, 해당부분은 CustomField로 처리하여 파싱할 수 있다.

 

4. Custom Field 처리

  async parseRss () {
    const rssParser = new RssParser({
      item: [
        ['pageContent', 'content']
      ]
    })
    const feed = await rssParser.parseURL('https://www.yonhapnewstv.co.kr/browse/feed')

    feed.items.forEach((item) => {
      console.log(item.title + ':' + item.link)
      console.log(item.content)
    })
  }

parseRss 메서드를 위와 같이 수정했다.

인스턴스 생성시 매개변수로 custom Field 정의를 넘길 수 있는데,

 

간단한 필드의 경우

item: ['content', 'date']

 

이름을 변경할 필드의 경우

item: [
	['media', 'video'],
	['abc', 'def']
]

위와 같이 배열안에 [From, To] 형식으로 넣어주면 해당 필드를 변경된 필드로 파싱할 수 있다.

 

5. 결과

 

'Node.js' 카테고리의 다른 글

Node.js - File system  (0) 2021.01.21