ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [php+snoopy] 나눔로또에서 로또번호 긁어오기
    파싱의 추억 2009. 4. 30. 20:06

    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만원에 합의를 봤다는 기사도 있었다. 물론 그 사람이 너무 과하게 한 부분이 있었겠지만 그래도 조심해야하지 않을까 한다.



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



    댓글

달을파는아이 @ nalab.kr