개인 프로젝트에서 사용할 RSS Reader가 필요해서 "직접 만들어볼까?" 하고 잠시 고민을 하다가 "너 그만큼 실력 안되잖아?"라는 자아의 소리를 듣고 인터넷을 뒤졌습니다. [Open Source RSS & RDF Tools in Java]라는 아름다운 사이트를 발견했고 그 중에서 Rome이라는 놈이 예쁘다는걸 알게되었습니다. rome-1.0.jar를 받아서 lib에 추가를 하니 필요한 lib가 하나 더 있더군요. 바로 jdom인데 jdom-1.1.1.zip을 받아서 lib에 추가를 해줬습니다. 그랬더니 정상적으로 실행이 되었고 티스토리, 다음, 네이버 블로그에서는 Feed를 정상적으로 읽어 왔습니다.

package rtong.rss;

import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.sun.syndication.feed.synd.SyndEntry;
import com.sun.syndication.feed.synd.SyndFeed;
import com.sun.syndication.io.SyndFeedInput;
import com.sun.syndication.io.XmlReader;

public class RssReaderTest {
    private static String url ="http://feeds.feedburner.com/rtong";

    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws Exception {
        
        URL feedUrl = new URL(url);
        SyndFeedInput input = new SyndFeedInput();
        SyndFeed syndFeed = input.build(new XmlReader(feedUrl));
        
        /*RSS*/
        System.out.println("### getFeedType [" + syndFeed.getFeedType() +"]");
        System.out.println("### getLanguage [" + syndFeed.getLanguage() +"]");
        System.out.println("### getTitle [" + syndFeed.getTitle() +"]");
        System.out.println("### getPublishedDate [" + syndFeed.getPublishedDate() +"]");

        List<SyndEntry> entries = syndFeed.getEntries();        
        SyndEntry entry = null;
        
        /*발행정보*/
        for(int i=0, j=entries.size(); i<j ; i++) {
            entry = entries.get(i);
            System.out.println("### getTitle [" + entry.getTitle() +"]");
            System.out.println("### getUri [" + entry.getUri() +"]");
            System.out.println("### getDescription [" + entry.getDescription().getValue() +"]");
            System.out.println("### getPublishedDate[" + entry.getPublishedDate().getTime() +"]");

            /*카테고리*/
            StringBuffer cate = new StringBuffer();
            if(entry.getCategories()!=null && entry.getCategories().size()>0){
             for(int ii=0,jj=entry.getCategories().size(); ii<jj; ii++){
             SyndCategoryImpl ss = (SyndCategoryImpl)entry.getCategories().get(ii);
             cate.append(CommonUtils.replace(ss.getName(), " ", "") ).append(",");
             }
            }
            System.out.println("### category [" + cate.toString() +"]");
        }        
    }
}

오픈소스를 이용하니 이렇게 간단하게 끝납니다. 근데 이걸 미련스럽게 혼자서 처음부터 다 만들려고 했다면 내년까지 RSS 읽어오는 부분을 하고있을 것 같네요.(그래도 버그 있고.. 호환성 문제 생기고 그러겠죠...) 세상의 모든 오픈소스에 감사합니다 

우선 위 소스 정도면 제가 원하는 정보를 다 가지고 옵니다. 하지만 사소한 문제가 하나 있습니다. description(발행한 글 본문)을 가져올때 본문의 태그까지 모조리 가져오는데 제게 필요한건 태그가 포함된 본문 전체가 아니라 텍스트만 필요하기 때문입니다. 해서 "태그 빼고 글자만"이라고 검색을 해보니 PHP에는 strip_tags라는 함수가 있는 것 같더군요. 해서 이리 저리 검색을 해보니 복잡하게 구현된 것도 있었지만 제가 원하는 결과물은 나오지 않았습니다. 그러다 구글링을 통해 놀라온 소스를 발견했지요. @@ 단 일곱줄로 제가 원하는 기능을 구현해 놓은 겁니다. (replaceAll 안의 정규식은 무슨 의미인지 모르겠네요.)

public static String stripTags(String text) {
if (text != null) {
return text.replaceAll("\\<.*?>","").trim();
} else {
return "";
}
}

위 전체 소스에서 entry.getDescription().getValue()를 stripTags(entry.getDescription().getValue())로만 해주면 태그는 빼고 사용자가 직접 입력한 내용만 추출됩니다. 오늘은 위 내용을 DB화 하는 부분을 구현하면 되겠습니다. 혹시 문제가 있는 부분이 발견되면 말씀해주세요 ^^;;




  1. BlogIcon 비케이 소울 2010.11.12 12:56 신고

    직접 rss리더를 제작하신건가요???? 잘 모르겠지만, 대단하십니다...

    • BlogIcon 알통 2010.11.12 15:09 신고

      대단하긴요, 제가 코딩한건 실제10줄인데요 ㅋㅋ

  2. BlogIcon 에이군 2011.02.20 22:14

    안녕하세요
    올려주신 글의 소스를 참조하여 약간 수정하여 제 블로그에 http://blog.naver.com/pdc222 글을 작성했습니다. 허락없이 올린점 양해 부탁 드립니다. ^^;;

    (throws IllegalArgumentException, FeedException, IOException 와
    CommonUtils 제거)

  3. 공대생 2013.03.31 18:08

    안녕하세요, 졸업작품 준비중인 공대생입니다. 글 잘 읽었습니다. 저도 RSS리더기를 만들어야하는데,자바가 처음이라서 오픈소스의 코드를 그대로 붙여넣고, 라이브러리를 추가해도 제대로 작동을 안합니다. 죄송하지만 혹시 추가적인 사항에 대한 팁을 얻을 수 있을까요?




[인공지능 언어 JESS와 자바로 구현한 | 인공지능 퀘스트]

  제가 처음 프로그램이란 것에 관심을 가진것은 대학을 다닐때 놈팽이처럼 한게임 고스톱게임을 하다가였습니다.  게임을 하다 우연히 특허에 관심을 가지게 되었죠. 인터넷게임 + 스폰서에 관한 BM이었는데 혼자 열심히 준비해서 출원을 했지만... 당연히 거절됐습니다. ^^

  그것이 이상하게 발전해서 학원을 1년이나 다니면서 프로그램을 공부하는 계기가 되었습니다. HTML부터 시작해서 ASP, PHP, JAVA, JSP, SQL, LINUX 등 하루에 8시간씩 참 많은 공부를 했는데 저는 자바와 리눅스쪽으로 관심을 가졌답니다. 고개를 오른쪽으로 돌려보면 개발관련 책들이 책장 한면을 다 채우고 있네요.

  취업을 해서 웹프로그램을 하면서 C/S 프로그램에 대한 환상 비슷한 것을 가지고 있었기에 이클립스RCP, SWT/JFace에 대해 잠깐 공부를 했는데 초보자를 뽑는 곳이 거의 전무하다는 것을 알게되어 곧 포기를 하고 말았답니다. 미국같은 경우 자바로 3D 온라인 게임도 만드는 곳이 있던데 ㅡㅡ^ 우리나라에서는 요원한 일인듯 합니다.

  검색엔진은 어떨까?라는 생각에 루씬도 공부를 했지만... 너무 어려워 책을 1독도 못한체 포기를 했구요. 그러다 다시 스킬 확장 및 식어가는 프로그래밍에 대한 열정에 불을 지피기위해 구입한 책이 Jess에 관한 책입니다.

  "인공지능(AI)", 단어자체로도 많은 사람을 설레이게 만드는 단어라 생각합니다. 근데 Jess가 왜 인공지능 언어일까요? Jess로 개발하는 그 패턴대로 자바로 개발을 하면 안되는걸까요? 그리고 어차피 Jess에서도 자바를 그대로 사용한다는데... 이해가 쉽지않군요. 이상은 언어에 대한 기본적인 지식이 부족한 웹개발자의 무식한 의문사항입니다. ㅠ.ㅠ

  이 책의 목차는 다음과 같습니다.
제1장 인공지능(Artificial Intelligence,AI)이란?
제2장 Jess(Java Expert System Shell)프로그래밍
제3장 탐색 방법(Search Methods)
제4장 지능형 에이전트(Intelligent Agent)
제5장 신경망(Neural Networks)
제6장 자연어 처리(Natural Language Processing)
제7장 퍼지 시스템(Fuzzy Systems)



  현재의 각오는 이 책을 이해하기위해 필요하다면 다른 책도 볼 생각을 하고 있습니다. 필요하다면 수학책도 볼거구요. 책 분량은 450P로 그다지 부담스럽지는 않은 분량이네요. 올해가 가기까지 자바와 관련된 XML, I/O, 네트워크, 병렬프로그램정도까지 공부해볼 생각입니다. 부디 자~알 되야~ 할텐데!! Jess에 대한 내용은 공부를 하면서 꾸준히 기록을 남기도록 하겠습니다. (인터넷에 Jess관련 자료가 정말 없더라구요 ^^)


  1. BlogIcon 아루카쿄 2008.08.30 20:12

    와~ 정말 많은 언어를 공부하셨네요^^

    종종와서 jess등 다른지식들 얻어갈게요

    사진또한 일품이네요^^

    • BlogIcon 알통 2008.08.31 21:42 신고

      오늘 Jess를 좀 봤는데요, 어렵네요 ㅡㅡ;;
      Java 객체를 이용한다지만 너무 낯설어요 ㅠ.ㅠ
      소화가 가능할지 의문입니다.
      근데 잘한번 해보고 싶네요 ^^ 지식을 습득하는대로 기록하겠습니다~





몇년만에 다시 리눅스 설치를 했습니다. 어느곳을 참고하지 않고 예전의 기억을 더듬어 설치를 했는데 잘 정리된 곳이 있더군요. 네트워크 설정부분과 설치할 프로그램 설정부분만 조금 차이가 있고 나머지 부분은 비슷할 것 같습니다. 아, 근데 페도라9가 나와있더군요. 최신것이 항상 좋은 것은 아니지만... 그래도 조금 아쉽네요. ^^

사실, 페도라8 설치야 윈도우 설치하듯 설치를 하면 되는 것이고, 페도라 설치 후 ftp를 설치하는데 1시간이나 소요됐네요. 너무 오래전의 일들이라...
참고 : 디얼마미님, Oops_NaDa님

[root로 사용자 변경]
[hdoc@hdoc proftpd]$ su -
[root@hdoc proftpd]$ pwd
/usr/tmp/proftpd
[root@hdoc tmp]$ mkdir proftpd
[root@hdoc tmp]$ cd proftpd/
[root@hdoc proftpd]$ ls


[proftpd 다운로드]
[root@hdoc proftpd]$ wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.0.tar.gz
[root@hdoc proftpd]$ ls
proftpd-1.3.0.tar.gz


[proftpd 악축해제]
[root@hdoc proftpd]$ tar xvfz proftpd-1.3.0.tar.gz
[root@hdoc proftpd]$ cd proftpd-1.3.0


[proftpd 환경설정]
[root@hdoc proftpd-1.3.0]$ ./configure --prefix=/usr/local/proftpd --enable-shadow


[proftpd 컴파일 및 설치]
[root@hdoc proftpd-1.3.0]$ make
[root@hdoc proftpd-1.3.0]$ make install


[proftpd 설정]
[root@hdoc proftpd-1.3.0]# vi /usr/local/proftpd/etc/proftpd.conf

# Set the user and group under which the server will run.
User                            nobody
#Group                        nogroup
Group                         nobody
#wheel 그룹 사용자외에 자기 home 디렉토리 못 벗어나게 설정
DefaultRoot                 ~ !wheel


[proftpd 시작]
[root@hdoc etc]# /usr/local/proftpd/sbin/proftpd


[proftpd 확인]
[root@hdoc etc]# netstat -an | grep LISTEN | grep 21
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN     
unix  2      [ ACC ]     STREAM     LISTENING     14121  /tmp/orbit-hdoc/linc-b29-0-4b22c1059554e


[root@hdoc etc]# ps -ef | grep proftpd
nobody    2651     1  0 14:33 ?        00:00:00 proftpd: (accepting connections)
root      2716  3118  0 14:43 pts/1    00:00:00 grep proftpd


[proftpd 정지]
[root@hdoc etc]# /usr/local/proftpd/sbin/ftpshut
안되면...
[root@hdoc etc]# killall proftpd


[shutmsg  삭제]
[root@hdoc sbin]# rm -rf /etc/shutmsg


[ftp서버 접속 사용자 수]
[root@hdoc sbin]# /usr/local/proftpd/bin/ftpcount


[ftp서버 top 명령]
[root@hdoc sbin]# /usr/local/proftpd/bin/ftptop


[ftp서버 who 명령]
[root@hdoc sbin]# /usr/local/proftpd/bin/ftpwho

앞으로 mysql, java, tomcat 등을 설치해야하는데 한번에 잘 됐으면 좋겠네요. (살짝 걱정!!)
혹시 잘못된 부분이 있으면 알려주세요. ^^