동글동글 라이프
irc 로그 분석 본문
my $request=HTTP::Request->new(GET=>'http://irc.perlog.org'); my $ua=LWP::UserAgent->new; $request->header( 'Authorization'=>'Basic id::pw', ); |
그리 나쁘지는 않은 방법이었지만
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
my $url = 'irc.perlog.org';
my $port = 80;
my $realm = 'Password!!';
my $id = '';
my $pw = '';
my $agent = LWP::UserAgent->new;
$agent->agent('HelloJEEN/0.01');
$agent->credentials(
"${url}:${port}",
$realm,
$id => $pw,
);
my $response = $agent->get( "http://$url" );
die "Error getting from [$url]: ", $response->status_line, "\n"
if $response->is_error;
print $response->content;
|
와우.. 깔끔한 코드..
그리고 기본인증을 해주는 credentials 라는 함수가 존재하고 있었다는.... 것을 배웠다.
이제 이것을 가지고... 뚝딱뚝딱 샤샤샥 해서...
2008년 결산 irc 로그 순위 구하기 프로그램 완성!
use strict;
use warnings;
use LWP::UserAgent;
use Encode qw/encode decode/;
sub _e{ encode('cp-949',decode('utf-8',shift)) };
my $url = 'irc.perlog.org';
my $port = 80;
my $realm = 'Password!!';
my $id = '';
my $pw = '';
my $agent = LWP::UserAgent->new;
$agent->agent('HelloJEEN/0.01');
$agent->credentials(
"${url}:${port}",
$realm,
$id => $pw,
);
my %hash;
my @day = ("01".."31");
my @month = ("04".."12");
foreach my $x(@month){
foreach my $y (@day){
print "$x월 $y일 로그 분석중... \n";
my $response = $agent->get( "http://$url/perl-kr/2008-$x-$y" );
# print "http://$url/2008-04-01/";
my $page = _e($response->content);
my @pages = $page =~ m!\d\] <(.+?)>!g;
foreach(@pages){
s/_*$//gs; #닉네임 뒤의 _를 없앤다.
$hash{$_}++;
}
}
}
my $file = "result.txt";
open my $fh, '>', $file or die "cannot open [$file] file: $!";
foreach(sort { $hash{$b} <=> $hash{$a} } keys %hash){
print $fh "$_ : $hash{$_} \n";
print"$_ : $hash{$_} \n";
}
|
원본 코드 : http://codepad.org/IMcef41i
시간은 좀 걸렸지만... 2008년동안 누가 가장 많이 글을 남겼는지 알 수 있었다.
JEEN : 76092
cate^^ : 21145
saillinux : 21115
a3r0 : 20245
하얀_고양이 : 13230
keedi : 12390
song : 11263
h0ney : 9535
pung96 : 8474
yuni : 7768
|
1위에서 10위까지만 출력해 보았다.
원본 확인 -> http://codepad.org/c1DNtZlb
1위는 압도한 차이로 JEEN님.. 어떻게 저런 횟수가 나올 수 있는지 -_-;;
2위는 cate^^ 님 역시~ irc를 꾸준히 지켜주시는 누님!
3위는 saillinux님 .. 오오옷!! 멋지신...
원래는 a3r0님이 3위인데.. 그 이유는 a3r0_X300 닉네임으로 2518번정도 로깅하셨기 때문!
통계를 냈더니 irc방에서 의견이 분분하게 나왔다.
[18:01:47] <keedi1> h0ney: 고생하셨습니다~ 한해 결산하니까 진짜 2008년이 다 간것 같네요~
[18:02:10] <keedi1> h0ney: 말회수보다 말 길이로 하면 더 신빙성이 있을수도 있겠죵~ :-)
[18:02:46] <keedi1> 비슷한 부류의 아이디는 정규표현식으로 하나로 묶어주고요
아마 4글자만 같은것 정도면 충분할 것 같아요.
[18:03:01] <keedi1> 아니다 세글자여야겠네요. JEEN ZEEN 이런 경우도 있으니까.
keedi님이 의견을 제시하셨.... 여기까지 흠.. 한번 해봐야겠... 다고 생각하였으나;;
[18:03:23] <keedi1> except workd 에 office home 류는 빼버리고~
[18:03:30] <a3r0> h0ney: 컬럼도 좀 맞춰주세요
[18:03:33] <keedi1> h0ney: 생각보다 코드가 길어지겠는데요?
[18:03:39] <a3r0> : 의 위치를
[18:03:59] <keedi1> h0ney: 컬럼 맞추는 것은 템플릿 툴킷이나..
printf 로.. 젤 닉이긴 사람 기준으로 하면 될듯...
[18:04:01] <cate^^> XML::LibXM 대하여 심도있게 공부를 좀
[18:04:18] <keedi1> 날짜별 시간대별로 그래프는 GD모듈로 0_0
[18:04:32] <keedi1> h0ney님 화이팅!
[18:05:04] <JEEN_> h0ney++
[18:05:30] <JEEN_> h0ney: 거기에 그날의 화제가 무엇인가 하는 것도 좀 알고 싶은 데요..
[18:05:35] <JEEN_> h0ney: 그것도 좀...
그날의 화제까지;; 그러면 통계가 아니게 되어버린다는..;;
[18:06:50] <a3r0> 아이디A: 아이디B 님 이렇게 누가 누구를 부른것도 그래프로 그려줬으면
[18:06:52] <keedi1> 음...
[18:06:55] <keedi1> a3r0: 오...
[18:06:58] <JEEN_> 저도 잠깐 갑의 입장이 되어보고 싶..
[18:07:00] <a3r0> 많이 불렀을 수록 화살표가 굵게
[18:07:02] <keedi1> a3r0: 좋은데요?
[18:07:08] <JEEN_> 서로서로 부르고 불렀을 대...
[18:07:16] <JEEN_> 사랑의 리퀘스트?
[18:07:18] <JEEN_> ;;
[18:07:20] <JEEN_> 아닌가..;;
[18:07:22] <keedi1> 흠!
[18:07:24] <a3r0> ㅎㅎ
[18:07:26] <cate^^> ㅡㅡ
[18:07:28] <a3r0> 서로간의 관심도
[18:07:31] <keedi1> 한글로 진님이라고 부르면 못 잡아주겠군요.
사랑의 리퀘스트까지 등장;;
다들 갑의 입장이 되고 싶었는지.. 한을 쏟아내시는듯;;
어쩌다 irc 로그 분석 프로젝트 회원 모집한다는...;;
'개발자 이야기 > Perl' 카테고리의 다른 글
Perl로 짠 IRC Bot (1) | 2009.01.13 |
---|---|
역 해시 (Reverse Hash) (4) | 2009.01.11 |
정규 표현식에 대하여... (6) | 2008.12.29 |
플래시 게임을 즐기자. (6) | 2008.12.11 |
Goo::Canvas (1) | 2008.12.11 |