최근 자바캔의 컨텐츠를 티스토리로 옮기는 준비를 할 때, 컨텐츠를 옮기는 대신 티스토리 블로그의 RSS 피드를 읽어와 자바캔 메인 화면에 보여줌으로써 컨텐츠를 쉽게 접근할 수 있게 하자는 계획을 세웠다. RSS 피드를 읽어와 사용하기 쉬운 형태로 변경해주는 라이브러리를 찾다가 'ROME'라는 오픈 소스 솔루션을 발견하게 되었다. RSS와 Atom의 다양한 버전을 지원할 뿐만 아니라 사용법도 매우 간단해서 간단하게 원하는 기능을 구현할 수 있었다.
먼저 ROME(RSS and atOM utilitiEs for Java)는 https://rome.dev.java.net/ 사이트에서 다운로드 받을 수 있다. 아직 정식 1.0 버전이 출시된 건 아니면, 이 글을 쓰는 시점에서 현재 버전은 1.0-RC1이다. rome-1.0RC1.zip 파일을 다운로드 받은 뒤 압축을 풀면 rome-1.0RC1.jar 파일이 생성되는 데 이 파일을 클래스패스에 추가해주면 된다. 또한, JDOM 1.0 버전을 사용하고 있기 때문에 JDOM 관련 라이브러리도 추가적으로 등록해 주어야 한다.
ROME를 이용한 피드 읽기
ROME가 제공하는 API를 이용해서 피드를 읽어오는 코드는 아래와 같다.
URL feedUrl = new URL(rssUrl);
try {
SyndFeedInput input = new SyndFeedInput();
SyndFeed feed = input.build(new XmlReader(feedUrl));
System.out.println("RSS title: " + feed.getTitle());
System.out.println("RSS author: " + feed.getAuthor());
List entries = feed.getEntries();
for (int i = 0; i < entries.size(); i++) {
SyndEntry entry = (SyndEntry) entries.get(i);
System.out.println("--- Entry " + i);
System.out.println(entry.getTitle());
System.out.println(entry.getAuthor());
System.out.println(entry.getDescription().getValue());
System.out.println(entry.getLink());
}
} catch (IllegalArgumentException e) {
// ...
} catch (FeedException e) {
// ...
} catch (IOException e) {
// ...
}
SyndFeedInput은 RSS 피드로부터 XML 데이터를 읽어와 피드 내용을 추상화한 SyndFeed 인스턴스를 리턴한다. SyndFeed는 내부적으로 개별 로그 정보를 담고 있는 SyndEntry 목록을 저장하고 있어서, 개별 로그의 제목이나 내용에 접근할 수 있다. 이 두 클래스가 제공하는 정보는 API 문서(https://rome.dev.java.net/apidocs/1_0/overview-summary.html)를 참고하기 바란다.
ROME가 지원하는 피드 버전
- RSS 0.90, RSS 0.91 Netscape, RSS 0.91 Userland
- RSS 0.92, RSS 0.93, RSS 0.94
- RSS 1.0
- RSS 2.0
- Atom 0.3
- Atom 1.0
관련 링크:
- ROME 프로젝트 사이트: https://rome.dev.java.net/
- ROME 위키: http://wiki.java.net/bin/view/Javawsxml/Rome