개발

JDOM을 이용한 RSS 파싱

에드몽단테스 2011. 5. 7. 09:22
관심이 있는 블로그의 RSS를 한 곳으로 몰아서 볼 수 있도록 페이지를 구성했다.
왜냐하면 그런 RSS리더 프로그램들은 많이 있지만, 내 손으로 만들어 보고 싶기도 했고, 또 한 번 만들어 놓으면 다르게 유용하게 쓰일 수 있을 것 같아서였다.
하지만, 문제는 RSS파싱이이었다.

자바에는 기본적으로 XML을 파싱할 수 있는 라이브러리를 제공해주고 있다.
지금까지 그 라이브러리를 사용했었고, 또 문제가 된적도 없었다. 하지만 이번에 여러 블로그를 파싱하려고 보니 특정 블로그에서 파싱이 잘 되지 않는 문제가 발생했다. 원인은 아직도 잘 모른다. 검색의 신도 잘 알려주지 않았다.
그래서 예전에 본 JDOM을 찾아보기로 했다. 사용해 본적은 없지만 많은 사람들이 JDOM을 사용하고 있다는 것은 이미 알고 있었다. 그래서 자료를 찾아봤다.

아래는 JDOM을 이용하여 XML(RSS)을 파싱하는 간단한 예이다.

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.xml.sax.InputSource;

public List<RssPost>parseRss(String rssURL){
        URL url = null;
        ArrayList<RssPost> rssList = new ArrayList<RssPost>();
        try{
            SAXBuilder parser = new SAXBuilder();
            parser.setValidation(false);
            parser.setIgnoringElementContentWhitespace(true);
            url = new URL(rssURL);
            InputSource is = new InputSource(url.openStream());
            doc = parser.build(is);
           
            Element root = doc.getRootElement();
            Element channel = root.getChild("channel");
            List list = channel.getChildren("item");
            Element title = channel.getChild("title");
            String blog_title = title.getText();
           
            for(int i=0; i<list.size(); i++){
                Element el = (Element)list.get(i);
                String item_title = el.getChildText("title");
                String item_link = el.getChildText("link");
                String item_pubDate = el.getChildText("pubDate");
               
                RssPost post = new RssPost();
                post.setAddress(item_link);
                post.setBlogname(blog_title);
                post.setTitle(item_title);
                post.setWdate(item_pubDate);
                post.setRsslink(rssURL);
                rssList.add(post);
            }
        }catch(Exception e){
            e.printStackTrace();
        }
        return rssList;
    }

자바에서 기본적으로 제공해주는 것보다 간결하고 코드도 깔끔하다.
다음은 이 라이브러리를 가지고 만든 RSS 모음 사이트이다.

http://dantes98.cafe24.com/main/rssPostList.dan

문제는 각각의 블로그를 읽어 내용을 파싱하고 내 디비에 넣어야 하는데, 주기적으로 할 수 없다는 것이다.
cafe24에 호스팅을 받고 있는데, cron을 지원을 하고 있지 않다.
rss 업데이트 할 수 있는 페이지를 별도로 만들어 놓았지만, 직접 호출해야 한다. ㅡㅡ;
다른 방법을 찾아 보아야 겠다.

JDOM은 이곳에서 자세한 내용을 확인할 수 있다.


반응형