다음카페 같은데 보면 방문자 정보를 10개씩 뿌려주는데 그거 긁어오는거..
스크립트를 cron 에 등록시키고 매 1분마다 실행시킨다.
데이터를 긁어와 특정한 곳에 파일 또는 DB로 저장한다.
url 정보가 바뀌진 않지만 만약, 디자인 레이아웃이 바뀌면 말짱 도루묵.. 고로 그때그때 맞게 수정해야 된다.
charset도 시스템에 맞게 적절히 수정..
#!/usr/bin/perl -w
#####################################################################################
# author : gogisnim (gogisnim@gmail.com)
# file : getCafe.pl
# date : 2009.10.05
# desc : LWP 모듈 테스트용, perl 감각익히기
# : 다음카페의 방문자 목록을 얻는 perl script
# : 단, cron으로 돌릴땐 local::lib 모듈을 지정해 주어야 한다.
# : perl -I$HOME/perl5/lib/perl5 -Mlocal::lib ~/perl/getCafe.pl 이런식으로...
#####################################################################################
use strict;
use warnings;
use LWP::Simple; # LWP 모듈
# 변수선언
my ($url, $html, $html2, $div1, $div2, $dir, $prev_txt, $old_txt, $new_txt, $data, $file_name) = ();
my (@nick,@tmp) = ();
$dir = "/home/xxx/perl/fun";
$url = "html긁어올url";
$html = get($url);
# html을 얻어오지 못하면 종료한다.
exit if ( !$html );
# $div1으로 나눈 2번째 요소를 취하고 $div2로 나눈 첫번째 요소를 취한다.
$div1 = "<div class=\"component_list group\">";
$div2 = "</div>";
($html2) = ( split $div2, (split $div1,$html)[1] )[0];
# 필요한 html을 \n 으로 분리해서 @tmp 배열에 넣는다.
@tmp = split("\n", $html2);
open (FH, $dir."/curr") or die("curr file error");
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
# 문자열 초기화
$prev_txt = $old_txt = $new_txt = "";
# curr 파일의 내용을 읽어서 $prev_txt에 저장
# 주의. UTF-8로 인코딩 해야한다.
while ( <FH> ) {
$prev_txt .= $_;
}
close(FH);
# 얻은 html 정보를 라인별로 읽어 정규표현식 <li title=\"(.+)\"> 에 만족하는 부분의 괄호부분($1)을 $old_txt에 저장
# 그중에서 이전 데이터($prev_txt)에 없는 정보(새로운 닉네임)은 $new_txt에 저장한다.
foreach ( @tmp ) {
if ( /<li title=\"(.+)\">/ ) {
$old_txt .= $1.",";
if ( index($prev_txt,$1) == -1 ) {
$new_txt .= $1.",";
}
}
}
# curr 파일을 쓰기모드로 열고 UTF-8로 인코딩한다음 $old_txt 내용을 저장한다.
open (FH, ">".$dir."/curr") or die("curr file error");
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
print FH $old_txt;
close(FH);
# 하루에 해당하는 파일 "년월일" $file_name 을 구한다. 예) 20091006
my ( $sec, $min, $hour, $mday, $mon, $year ) = ();
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$year = $year + 1900;
$mon = $mon + 1;
if(length($mon)==1) { $mon = '0'.$mon; }
if(length($mday)==1) { $mday = '0'.$mday; }
if(length($hour)==1) { $hour = '0'.$hour; }
if(length($min)==1) { $min = '0'.$min; }
$file_name = $year.$mon.$mday;
# 새로운 닉네임($new_txt) 내용을 $file_name에 저장한다.
open (FH, ">>".$dir."/$file_name") or die("data file error");
$data = "\n".$hour.":".$min." ==> ".$new_txt;
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
print FH $data;
close(FH);
스크립트를 cron 에 등록시키고 매 1분마다 실행시킨다.
데이터를 긁어와 특정한 곳에 파일 또는 DB로 저장한다.
url 정보가 바뀌진 않지만 만약, 디자인 레이아웃이 바뀌면 말짱 도루묵.. 고로 그때그때 맞게 수정해야 된다.
charset도 시스템에 맞게 적절히 수정..
#!/usr/bin/perl -w
#####################################################################################
# author : gogisnim (gogisnim@gmail.com)
# file : getCafe.pl
# date : 2009.10.05
# desc : LWP 모듈 테스트용, perl 감각익히기
# : 다음카페의 방문자 목록을 얻는 perl script
# : 단, cron으로 돌릴땐 local::lib 모듈을 지정해 주어야 한다.
# : perl -I$HOME/perl5/lib/perl5 -Mlocal::lib ~/perl/getCafe.pl 이런식으로...
#####################################################################################
use strict;
use warnings;
use LWP::Simple; # LWP 모듈
# 변수선언
my ($url, $html, $html2, $div1, $div2, $dir, $prev_txt, $old_txt, $new_txt, $data, $file_name) = ();
my (@nick,@tmp) = ();
$dir = "/home/xxx/perl/fun";
$url = "html긁어올url";
$html = get($url);
# html을 얻어오지 못하면 종료한다.
exit if ( !$html );
# $div1으로 나눈 2번째 요소를 취하고 $div2로 나눈 첫번째 요소를 취한다.
$div1 = "<div class=\"component_list group\">";
$div2 = "</div>";
($html2) = ( split $div2, (split $div1,$html)[1] )[0];
# 필요한 html을 \n 으로 분리해서 @tmp 배열에 넣는다.
@tmp = split("\n", $html2);
open (FH, $dir."/curr") or die("curr file error");
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
# 문자열 초기화
$prev_txt = $old_txt = $new_txt = "";
# curr 파일의 내용을 읽어서 $prev_txt에 저장
# 주의. UTF-8로 인코딩 해야한다.
while ( <FH> ) {
$prev_txt .= $_;
}
close(FH);
# 얻은 html 정보를 라인별로 읽어 정규표현식 <li title=\"(.+)\"> 에 만족하는 부분의 괄호부분($1)을 $old_txt에 저장
# 그중에서 이전 데이터($prev_txt)에 없는 정보(새로운 닉네임)은 $new_txt에 저장한다.
foreach ( @tmp ) {
if ( /<li title=\"(.+)\">/ ) {
$old_txt .= $1.",";
if ( index($prev_txt,$1) == -1 ) {
$new_txt .= $1.",";
}
}
}
# curr 파일을 쓰기모드로 열고 UTF-8로 인코딩한다음 $old_txt 내용을 저장한다.
open (FH, ">".$dir."/curr") or die("curr file error");
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
print FH $old_txt;
close(FH);
# 하루에 해당하는 파일 "년월일" $file_name 을 구한다. 예) 20091006
my ( $sec, $min, $hour, $mday, $mon, $year ) = ();
($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
$year = $year + 1900;
$mon = $mon + 1;
if(length($mon)==1) { $mon = '0'.$mon; }
if(length($mday)==1) { $mday = '0'.$mday; }
if(length($hour)==1) { $hour = '0'.$hour; }
if(length($min)==1) { $min = '0'.$min; }
$file_name = $year.$mon.$mday;
# 새로운 닉네임($new_txt) 내용을 $file_name에 저장한다.
open (FH, ">>".$dir."/$file_name") or die("data file error");
$data = "\n".$hour.":".$min." ==> ".$new_txt;
#binmode FH, ':encoding(UTF-8)';
binmode FH, ':encoding(euc-kr)';
print FH $data;
close(FH);

댓글을 달아 주세요