mwultong Blog ... 프로그래밍 / 계산기

컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Saturday, April 29, 2006

Perl/펄] 세상에서 가장 간단한 RSS리더기를 만들어 보자


Perl 과 RSS에 대한 게시물입니다. 2024-03-21에 약간 업데이트했습니다.


※ 아래 박스 클릭 후, 키보드 화살표 키로 좌우 스크롤 가능함
#!/usr/bin/perl
use strict; use warnings;

# 간단한 RSS 리더기 v0.1

#use encoding "utf8"; # 유니코드로 출력. 화면에선 글자 깨짐.
use encoding "utf8", STDOUT => "cp949"; # 화면에서 글자 잘 보임

use LWP::Simple;
use XML::RSS; # CPAN 에 가서 다운로드받아야 함

my $my_url = 'http://feeds.feedburner.com/mwultong'; # 기본 피드 주소
$my_url = $ARGV[0] if (defined $ARGV[0]); # 다른 피드 주소를 옵션으로 주면 그 다른 주소를 사용

my $content = get($my_url);

my $rss = new XML::RSS;
eval { $rss->parse($content); };

# 피드 헤더 정보 출력
print "URL: ".$my_url."\n";
print "XML encoding: ".$rss->encoding."\n";
print "RSS Version: ".$rss->version."\n";
print "Title: ".$rss->channel('title')."\n";
print "Language: ".$rss->channel('language')."\n";
print "Rating: ".$rss->channel('rating')."\n";
print "Copyright: ".$rss->channel('copyright')."\n";
print "Publish Date: ".$rss->channel('pubDate')."\n";
print "Last Build Date: ".$rss->channel('lastBuildDate')."\n";
print "CDF URL: ".$rss->channel('docs')."\n";
print "Items: ".scalar(@{$rss->items})."\n\n";

for my $item (@{$rss->{'items'}}) { # 포스트들의 제목 출력
  print "$item->{title}\n";
}

__END__

여기서부터는 이런저런 메모를 적을 수 있다.



위의 코드를 rss.pl 등의 적당한 이름으로 하드에 저장하면 된다.


이것은 포스트 제목들만 출력하는 간단한 RSS리더기다. Atom은 되지 않고 RSS만 가능하다. RSS 1.0은 물론 2.0도 지원된다.

별도의 모듈을 다운받아야 이 펄 코드를 실행시킬 수 있다. 그렇지만 어렵지는 않다.

CPAN에서 XML::RSS 로 검색하면 모듈이 하나 나오는데 거기서, XML-RSS-1.10.tar.gz 라는 이름의 파일(버전에 따라 다름)을 다운로드 받아서, WinRAR 등으로, 안을 들여다보면,

XML-RSS-1.10\lib\XML
이런 폴더가 압축되어 있고, XML 폴더 밑에 RSS.pm 이라는 앙증맞은 파일이 하나 들어 있다. 이것이 그 모듈이다. 텍스트 파일로 되어 있다.

이 RSS.pm 만 풀어서 라이브러리 폴더에 넣어주면 된다.(펄 라이브러리를 지정하는 방법은 여기를 참고.) 이 모듈에는 .xs 파일이 없기 때문에, 즉 순수한 펄 코드로만 이루어진 모듈이기에 C컴파일러로 컴파일할 필요가 없다.


필자의 경우

D:\WINDOWS_\Programs\perl_\site\lib
이 폴더에, XML 이라는 폴더를 하나 만들고, 그 XML 폴더 밑에 RSS.pm 파일을 넣어 주었다.

결국 RSS.pm 모듈의 전체적인 주소는 이렇게 되었다:
D:\WINDOWS_\Programs\perl_\site\lib\XML\RSS.pm


findpm RSS.pm
으로, 모듈이 잘 설치되었는지 확인해 보면, 이상한 에러가 나는데, 실제 스크립트 자체는 잘 작동했다.



위의 펄 소스의 뼈대는 일본 블로거( http://hail2u.net/rss/ # 폐쇄됨)의 블로그에서 가져온 코드를 약간 한국화시키고 기능을 추가한 것이다. 그리고 위의 소스 중에서 RSS 헤더 정보를 출력하는 부분은 XML::RSS 모듈 속에 동봉된 예제인 rss_info.pl 에서 따온 것이다. 그런데 헤더 정보 출력이 그리 정확하지 않았다.



아래는, 펄마니아의 피드인
http://www.perlmania.or.kr/rss/perlmania.xml
를 옵션으로 주고 실행했을 때의 결과이다.

rss.pl http://www.perlmania.or.kr/rss/perlmania.xml

이렇게 실행시키면 된다. (펄마니아 게시판에 스팸들이 많이 오는데 그것까지 다 나오고 있다.)

D:\Z>rss.pl http://www.perlmania.or.kr/rss/perlmania.xml
URL: http://www.perlmania.or.kr/rss/perlmania.xml
XML encoding: UTF-8
RSS Version: 1.0
Title: PerlMania
Language: 0
Rating: 0
Copyright: 0
Publish Date: 0
Last Build Date: 0
CDF URL: 0
Items: 10

외국어공부
defunct가 됩니다..
PDF 파일 보여주기
○박사이트이랍니다
○박사이트이랍니다
싱*싱*한* ○.걸. ○.슴 ○.출 동/영/상♣
Re: 2박3일 동원훈련다녀왔습니다.
Re: Re: Re: 디비에서던져주는메세지를받고싶어요
Re: Re: 디비에서던져주는메세지를받고싶어요
Re: 문자열 검색 도와주세요.

D:\Z>


펄마니아의 피드는 현재, euc-kr 인데도 UTF-8 로 오인하는 버그가 RSS.pm 모듈에는 있었다.



피드 주소를 옵션으로 지정해 주지 않고 그냥 실행시키면 기본값으로, 필자의 피드인
http://feeds.feedburner.com/mwultong
이 나오도록 했다. (이 점이 불만스러운 분은, 자신의 피드 주소로 소스 코드를 수정하면 된다.ㅎㅎ)

D:\Z>rss.pl
URL: http://feeds.feedburner.com/mwultong
XML encoding: UTF-8
RSS Version: 2.0
Title: mwultong Blog ― 소설 / IT
Language: en-US
Rating: 0
Copyright: 0
Publish Date: 0
Last Build Date: Fri, 28 Apr 2006 21:53:52 -0500
CDF URL: 0
Items: 15

블로그 피드(Feed) 상단에, 그림 로고(Logo) 넣기
[QnA] 왜 TIF/TIFF 화일은 업로드할 수 없나요. 스캐너로 뽑은 사진인데-_-;
[HTML/CSS] 사이트 피드 자동검출/자동인식(Autodiscovery) 태그 수정하기
[공지] RSS 2.0 으로 블로그 피드를 바꾸었습니다
[독서] '댄 브라운' 소설 '다 빈치 코드' (베텔스만 코리아)
[스팸 방지/프라이버시 보호] 이메일(EMail)의 이미지를 차단하자
[독서] 김훈 소설 '언니의 폐경' 프리뷰 / 제5회 황순원 문학상 수상작품집
구글의 인기 검색어 알아보기 ㅎㅎ: Keyword Tool
블로그의 사이트 피드를 피드버너(FeedBurner)에 등록
[QnA] 3dsmax.chm 이란? 3dsmax.chm 파일은 어디서 다운로드받나요?
[QnA] 한자 폰트(글꼴) 있는 곳 / 좋은 한자 폰트는?
[HTML/CSS] 포스트 제목 툴팁(tooltip)의 쌍따옴표/홑따옴표 문제 해결
[독서] 마광수 소설 '권태' 프리뷰 (문학사상사)
[독서] 한강(韓江) 소설 '몽고반점' (이상문학상 대상 수상작) 프리뷰 (문학사상사)
[HTML/CSS] 메타 태그(META TAG)의 'REVISIT-AFTER' 속성은 이제 쓸모 없는 듯

D:\Z>


이번에는 정확하게 출력되었다.

유니코드 피드이지만, 명령 프롬프트 화면에서 유니코드를 출력하면 한글이 깨졌기에, 완성형 ANSI로 출력했다. 출력을 유니코드(UTF-8)로 하기 위해서는,

이것을
#use encoding "utf8"; # 유니코드로 출력. 화면에선 글자 깨짐.
use encoding "utf8", STDOUT => "cp949"; # 화면에서 글자 잘 보임

이렇게 주석(#) 기호를 옮겨서
use encoding "utf8"; # 유니코드로 출력. 화면에선 글자 깨짐.
#use encoding "utf8", STDOUT => "cp949"; # 화면에서 글자 잘 보임

수정한 후, 다음과 같이 재지향을 사용해서, 결과를 파일로 저장하면 된다:

rss.pl > out.txt

이렇게 하면 명령 프롬프트에 나온 글자들이 파일로 저장된다. 다만 도스 텍스트가 아닌 유닉스 텍스트이기에 메모장에서는 이상하게 보이는데, 울트라에디트 같은 고급 에디터에서 불러서 읽으면 된다. ("[Perl/펄] 한글 자소 분리: '똠방각하'를 'ㄸㅗㅁㅂㅏㅇㄱㅏㄱㅎㅏ'로 자동 변환" 포스트에 보면, 유닉스 텍스트를 도스 텍스트로 출력하는 sub LF2LFCR 라는 함수가 있는데, 이것을 쓰면 도스 텍스트로 출력할 수 있을 것이다.)




결론



이 포스트에서 소개한 펄 코드 자체는 너무 단순해서 별로 쓸모가 없지만, 이것을 기반으로 잘 응용하면 훌륭한 RSS툴을 만들 수도 있을 것이다.

아톰 피드를 지원하기 위해서는 CPAN에서 atom 으로 검색하여 모듈을 얻어서 사용하면 된다. (펄(Perl)은 어지간한 코드는 다 CPAN에서 구할 수 있기에 자신이 직접 만들 필요는 없다.) 그런데 아톰 피드는 외국에서도 별로 인기가 없는 듯했다.



tag: rss
RSS 피드 | Atom Feed
tag: perl
Perl | 펄

0 Comments:

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Previous Posts
Monthly Archives
Top