[php+snoopy] 나눔로또에서 로또번호 긁어오기

php에서 특정 사이트를 긁어올때는 file 함수나 fopen 함수를 쓰면 된다. 왠만한 사이트는 file 함수로 접근을 할경우 가져가지 못하게 막아놓는다. 그런 사이트들를 긁어오려면 "snoopy" 라는 php class 를 이용한다.

snoopy는 php에서 소켓을 쉽게 쓸수 있는 강력한 클래스이다. 단순히 사이트를 긁어오는 기능과 더불어 html 태그를 쏙 빼고 텍스트만 긁어올수도 있으며, form 으로 바로 submit 해서 결과값을 받을수 있는 유용한 클래스이다.

    /(
//\\
// )_.-"""-._,-""-.
\\ ^,'_\ /_\ )
`./ /O\| |/O\\ /
\ \_/| |\_/ \_/
\ .' _ `. /
.-. ( .:(_):. ) ,-.
( `._`._.-._,'_,' )
) (
( .-------------. ) hjw
`-' `-'

[강좌] php용 강력하면서 쉬운 소켓(socket)클래스 , Snoopy 


본격적으로 snoopy를 이용해서 나눔로또 페이지를 긁어보자.


  1. 먼저 snoopy 클래스를 만든다
  2. include_once 'class.snoopy.php'; 
    $snoopy = new snoopy;

  3. 나눔로또 당첨번호 안내 페이지 주소를 긁어온다.

    $kai 는 회차를 나타낸다.
  4. $getUrl = "http://www.645lotto.net/result/guide_win_number.asp?sltSeq=".$kai;

    $snoopy->fetch($getUrl);

  5. 번호부분의 패턴을 분석해서 번호만 빼온다.
  6. $pattern='/img src="..\/images\/result\/ball[0-9]*.gif/'; 
    preg_match_all($pattern,$snoopy->results,$out);  
    for($i=0;$i<=6;$i++){ 
         $num[$i]=str_replace(".gif","",str_replace('img src="../images/result/ball',"",$out[0][$i])); 
    }

여기서 $num[0]~$num[5] 는 로또번호고, $num[6]은 보너스번호다.

소스 전체는 아래와 같다.

include_once 'class.snoopy.php';
$snoopy = new snoopy;
$getUrl = "http://www.645lotto.net/result/guide_win_number.asp?sltSeq=".$kai;
$snoopy->fetch($getUrl);
$pattern='/img src="..\/images\/result\/ball[0-9]*.gif/';
preg_match_all($pattern,$snoopy->results,$out); 
for($i=0;$i<=6;$i++){
     $num[$i]=str_replace(".gif","",str_replace('img src="../images/result/ball',"",$out[0][$i]));
}

이렇게 긁어온 번호들을 디비로 넣으면 모든 작업은 끝이다. 이 프로그램을 토요일 밤에 한번씩 돌려주면 최신 로또번호를 가져올수가 있다. 토요일밤마다 돌려주기 귀찮으면 crontab 이나 스케줄러를 쓰면 되는데 보통 cafe24같은 호스팅에서는 지원해주지 않는다.

그래서 내가 쓰는 꽁수는 feedburner 를 이용하는것이다.

feedburner를 이용한 주기적인 프로그램 실행(crontab 대용)


이정도 작업을 하고 나서 손털면 매주 자동으로 로또번호들이 자기의 디비에 차곡 차곡 쌓인다.뱀로또(http://bemlotto.com/) 에 이번회차 당첨번호 부분이 이렇게 만들어지고 있다.



물론 나눔로또 사이트의 디자인이 바뀌어 버릴때는 문제가 생긴다. 이럴때는 거기가 맞게 다시 패턴을 분석해서 적용해줘야한다. 예전에는 국민은행페이지에서 가져왔는데 사업자가 나눔로또로 바뀌면서 한동안 로또번호를 가져오지 못한적이 있었다. 지금은 수정해서 잘 가져오고 있다.

그리고 사이트를 긁어오는부분은 신중을 기해야한다. 너무 과도하게 긁어오는 행위는 법에 저촉되기 때문이다. 얼마전에 취업정보사이트에서 사이트를 긁어서 그대로 자기홈페이지에 제공한 사람이 3000만원에 합의를 봤다는 기사도 있었다. 물론 그 사람이 너무 과하게 한 부분이 있었겠지만 그래도 조심해야하지 않을까 한다.



사이트 파싱에 궁금한점이나, 의뢰는  로 주세요 ^^



Posted by 달을파는아이 달을파는아이

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. 2009.05.01 13:53 신고
    댓글 주소 수정/삭제 댓글
    개인적으로 주기적으로 업데이트되는 특정 정보를 자동으로 수집하는 방법의 필요성을 가끔 느끼는데, 이런식으로 해결할 수 있군요. 좋은 정보 잘 보고 갑니다.
    • 2009.05.01 14:11 신고
      댓글 주소 수정/삭제
      예전~글인데, 새로 갱신하길 잘했네요 ㅋㅋ 정확하게 시간을 정해서 할수는 없지만, 그런데로 쓸만합니다.
      3시간 정도 간격으로 긁어가는것같더라구요. ~ ^^
  2. 2009.05.04 23:54 신고
    댓글 주소 수정/삭제 댓글
    cafe24에서도 계정별 crontab을 지원합니다.

    crontab -e [엔터]

    치시면 크론탭을 vi로 수정하게 되며

    저장하고 나오시면 자동으로 설정된 시간에 크론이 돕니다..
  3. 2009.05.05 16:44 신고
    댓글 주소 수정/삭제 댓글
    흠.. 그런가요..

    전 64비트 광 쓰고 있었는데...

    되던데..
  4. 2010.01.22 02:27
    댓글 주소 수정/삭제 댓글
    비밀댓글입니다
  5. 2010.04.22 16:06
    댓글 주소 수정/삭제 댓글
    비밀댓글입니다


BLOG main image
멈추지 않으면 얼마나 천천히 가는지는 문제가 되지 않느니라 by 달을파는아이

나의 인생 시계 만들기 >>

카테고리

분류 전체보기 (429)
달을파는아이 (283)
머니머신 (125)
파싱의 추억 (20)
현미촌 현미국수면 (1)
Statistics Graph