개발
JDOM을 이용한 RSS 파싱
에드몽단테스
2011. 5. 7. 09:22
관심이 있는 블로그의 RSS를 한 곳으로 몰아서 볼 수 있도록 페이지를 구성했다.
왜냐하면 그런 RSS리더 프로그램들은 많이 있지만, 내 손으로 만들어 보고 싶기도 했고, 또 한 번 만들어 놓으면 다르게 유용하게 쓰일 수 있을 것 같아서였다.
하지만, 문제는 RSS파싱이이었다.
자바에는 기본적으로 XML을 파싱할 수 있는 라이브러리를 제공해주고 있다.
지금까지 그 라이브러리를 사용했었고, 또 문제가 된적도 없었다. 하지만 이번에 여러 블로그를 파싱하려고 보니 특정 블로그에서 파싱이 잘 되지 않는 문제가 발생했다. 원인은 아직도 잘 모른다. 검색의 신도 잘 알려주지 않았다.
그래서 예전에 본 JDOM을 찾아보기로 했다. 사용해 본적은 없지만 많은 사람들이 JDOM을 사용하고 있다는 것은 이미 알고 있었다. 그래서 자료를 찾아봤다.
아래는 JDOM을 이용하여 XML(RSS)을 파싱하는 간단한 예이다.
자바에서 기본적으로 제공해주는 것보다 간결하고 코드도 깔끔하다.
다음은 이 라이브러리를 가지고 만든 RSS 모음 사이트이다.
문제는 각각의 블로그를 읽어 내용을 파싱하고 내 디비에 넣어야 하는데, 주기적으로 할 수 없다는 것이다.
cafe24에 호스팅을 받고 있는데, cron을 지원을 하고 있지 않다.
rss 업데이트 할 수 있는 페이지를 별도로 만들어 놓았지만, 직접 호출해야 한다. ㅡㅡ;
다른 방법을 찾아 보아야 겠다.
JDOM은 이곳에서 자세한 내용을 확인할 수 있다.
왜냐하면 그런 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;
}
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은 이곳에서 자세한 내용을 확인할 수 있다.
반응형