ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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은 이곳에서 자세한 내용을 확인할 수 있다.


    반응형

    '개발' 카테고리의 다른 글

    스크립트로 트위터 불러오기  (0) 2011.05.24
    트위터 api를 이용하여 트윗목록 확인하기  (4) 2011.05.16
    php iconv 함수  (0) 2011.04.13
    배너 스크립트  (0) 2011.04.08
    뉴스기사 스크롤 자바스크립트  (0) 2011.04.01

    댓글

Designed by Tistory.