오늘부터 로또 분석 프로그램을 제작합니다. Excel VBA로 만들고 있습니다. 뚝딱 만들어 가면서 이런저런 생각과 느낌이 드네요. 시스템과 프로그램 숫자 등등.
우선 지금까지 로또 당첨번호를 가져왔습니다.
http://645lotto.net 에서 당첨안내 페이지의 소스를 본 결과 다음과 같은 방법으로 당첨번호를 가져올 수 있으리라 생각했습니다.
- 당첨번호는 페이지에서 이미지로 나타납니다. 파일명을 통해 번호를 알 수 있습니다.
img src=”../images/result/ball숫자…” => 정규표현식으로 숫자만 가져올 수 있습니다. - 당첨번호는 회차별로 안내됩니다. 역시 페이지를 살펴본 결과 sltSeq 라는 parameter로 POST 방식을 이용 http://www.645lotto.net/result/guide_win_number.asp 페이지로 회차가 전달됩니다. => wget 과 셸 스크립트로 한번에 모두 가져올 수 있습니다.
위의 두 가지 작업으로 1회차부터 295회차(최근)까지의 모든 당첨번호를 가져올 수 있었습니다. 탭으로 구분한 텍스트로 만들어서 엑셀로 쉽게 가져올 수 있었습니다. 두 작업을 하면서 느낀 점이 있습니다. 유닉스 소프트웨어들이 가진 ‘부드러움‘ 이죠. 원하는 것이 무언지만 안다면 수 많은 지원툴과 프로그래밍 언어, 그리고 유닉스에 어울리는 유연한 생각으로 쉽게 만들어 낼수 있습니다.
첫 번째 작업은 펄(perl)로 만들었습니다.
#!/usr/bin/perl -w
if (@ARGV != 1) {
print “Pass the file name.n”;
exit();
}open my $file, $ARGV[0] or die “Opening file failed.: $!”;
$ARGV[0] =~ m/([0-9]+)$/;
print “$1t”;my $line;
while ($line = <$file>) {
if ($line =~ m/images/result/ball([0-9]+)/) {
print “$1t”;
}
}print “n”;
close $file;
두 번째 작업은 간단한 셸(bash) 스크립트로 만들었습니다.
#!/bin/bash
for i in `seq 1 295`;
do
wget ‘http://www.645lotto.net/result/guide_win_number.asp?sltSeq=’$i’
done
두 번째 작업으로 파일들이 주르륵 내려옵니다. brutal 하게 계속 요청하는데도 로또 서버는 별로 영향을 안 받더군요. 꽤 괜찮은가 봅니다. ㅋ
그리고 두 번째 프로그램이 만들어낸 파일들을 첫 번째 프로그램으로 처리합니다. 여기까지 만들고 봤더니 둘 사이를 연결할 프로그램이 하나 더 필요하더군요. 그래서 세 번째 프로그램을 만들었습니다. 파일들이 많은데 첫 번째 프로그램은 하나씩만 읽을 수 있게 만들었거든요.
#!/bin/bash
FILENAME=./guide_win_number.asp?sltSeq=
for i in `seq 1 295`;
do
./lotto_parser.pl $FILENAME$i
done
이렇게 했더니 대략 아래와 같은 결과물이 만들어졌습니다.
284 02 07 15 24 30 45 28
285 13 33 37 40 41 45 02
286 01 15 19 40 42 44 17
287 06 12 24 27 35 37 41
288 01 12 17 28 35 41 10
289 03 14 33 37 38 42 10
290 08 13 18 32 39 45 07
291 03 07 08 18 20 42 45
292 17 18 31 32 33 34 10
293 01 09 17 21 29 33 24
294 06 10 17 30 37 38 40
295 01 04 12 16 18 38 08
…
하루종일 일은 안하고 로또 프로그램을 만들었더니. 아주 즐겁고 마음도 가볍고 그렇네요 🙂 다음엔 MS로 넘어와서 VBA에 대해 얘기해 보겠습니다. 물론, 그 전에 로또 1등 당첨이 된다면 다음 얘기란 없겠죠?