차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
tech:php_galkuri [2013/05/16 22:13] – 새로 만듦 V_L | tech:php_galkuri [2016/07/12 00:56] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 1: | 줄 1: | ||
+ | {{tag> | ||
+ | ======Php Galkuri====== | ||
+ | |||
+ | http:// | ||
+ | |||
+ | <code php><? | ||
+ | / | ||
+ | * 프로그램명 : | ||
+ | * 버젼 : | ||
+ | * 변경일 : | ||
+ | * 작성자 : | ||
+ | * 메일 : | ||
+ | * 용도 : | ||
+ | ******************************************************************************/ | ||
+ | |||
+ | class GalKuRi { | ||
+ | // public | ||
+ | var $response_header = ''; | ||
+ | var $contents = ''; | ||
+ | var $parse_value = array(); | ||
+ | |||
+ | // private | ||
+ | var $_goods_no = 0; // 결과배열에 저장할때 쓰일 상품 번호 | ||
+ | var $_offset = 0; // 검색 시작 번지 | ||
+ | var $_page_no = 0; // 페이지 별로 읽을 경우 페이지 번호 저장변수 | ||
+ | var $_page_var = ''; | ||
+ | var $_parse_pattern = array(); | ||
+ | var $_process_func = ''; | ||
+ | var $_roop = 1; // 페이지를 계속 파싱할지 여부 | ||
+ | var $_set_cookies = ''; | ||
+ | var $_set_referer = ''; | ||
+ | var $_skip_offset = array(); | ||
+ | var $_wait = 0; // 한페이지 처리후 멈춤시간(단위 초) | ||
+ | |||
+ | function voidSetPattern($field, | ||
+ | / | ||
+ | * public | ||
+ | * 파싱할 패턴문자 설정 | ||
+ | * ex) $buf-> | ||
+ | * | ||
+ | * 텍스트 내용중 < 와 > 사이에 있는 문자열을 name 이라는 이름으로 빼내고 | ||
+ | * 결과문자열중 \ 를 지우고자 하는경우 | ||
+ | * ex) $buf-> | ||
+ | ********************************************************************/ | ||
+ | if($field ===== ' | ||
+ | $this-> | ||
+ | |||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidSetSkipOffset($field, | ||
+ | / | ||
+ | * public | ||
+ | * 파싱후 패턴과 동일한 문자가 중간에 존재하여 그부분의 뒷부분 부터 파싱을 원할경우 | ||
+ | * ex) $buf-> | ||
+ | * | ||
+ | * name 필드 파싱후 다음 파싱 패턴과 동일한 문자가 있을경우 건너뜀 | ||
+ | * ex) $buf-> | ||
+ | * | ||
+ | * 필드명을 _default_ 라고 설정할경우 파싱전 해당 문자로 이동을 한후에 | ||
+ | * 파싱을 시작함. default 시작위치를 설정 | ||
+ | * ex) $buf-> | ||
+ | ********************************************************************/ | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidSetCookie($var, | ||
+ | / | ||
+ | * public | ||
+ | * 쿠키를 설정합니다. | ||
+ | * ex) $buf-> | ||
+ | ********************************************************************/ | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidSetReferer($ref) { | ||
+ | / | ||
+ | * public | ||
+ | * 레퍼러를 설정합니다. | ||
+ | * ex) $buf-> | ||
+ | ********************************************************************/ | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidSetPage($var, | ||
+ | / | ||
+ | * public | ||
+ | * 페이지 처리를 원할경우 설정 | ||
+ | * ex) $buf-> | ||
+ | * 하나의 주소에 연속된 페이지가 존재할경우 계속 읽어들일수 있습니다. | ||
+ | * | ||
+ | * 페이지변수 pagenum=1, | ||
+ | * ex) $buf-> | ||
+ | * | ||
+ | * 주의) 페이지가 많을경우 배열에 결과값이 계속 쌓이므로 리소스가 커질수 있으니 | ||
+ | * 생성자에 설정할수 있는 외부 함수를 이용하여 페이지 마다 바로 처리하시기 바라며 | ||
+ | * 역시나 시간이 오래 걸릴수 있으니 쉘모드에서 실행하시기 바랍니다. | ||
+ | ********************************************************************/ | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidSetSleep($sec) { | ||
+ | / | ||
+ | * public | ||
+ | * 페이지 처리시 완료후 잠시 멈춰있을 시간입니다. | ||
+ | * ex) $buf-> | ||
+ | ********************************************************************/ | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidGetAllContents($url, | ||
+ | / | ||
+ | * public | ||
+ | * 전체 페이지 내용을 <span style=" | ||
+ | * ex) $buf-> | ||
+ | * | ||
+ | * 결과 값은 | ||
+ | * $buf-> | ||
+ | * $buf-> | ||
+ | ********************************************************************/ | ||
+ | if($method != ' | ||
+ | $this-> | ||
+ | |||
+ | $url_info = parse_url($url); | ||
+ | $fp = fsockopen($url_info[' | ||
+ | if(!$fp) { | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | if($method ===== ' | ||
+ | fputs($fp," | ||
+ | fputs($fp," | ||
+ | fputs($fp," | ||
+ | |||
+ | if($this-> | ||
+ | fputs($fp," | ||
+ | |||
+ | if($this-> | ||
+ | fputs($fp," | ||
+ | |||
+ | fputs($fp," | ||
+ | fputs($fp," | ||
+ | fputs($fp," | ||
+ | fputs($fp, | ||
+ | } | ||
+ | else { | ||
+ | fputs($fp," | ||
+ | fputs($fp," | ||
+ | fputs($fp," | ||
+ | |||
+ | if($this-> | ||
+ | fputs($fp," | ||
+ | |||
+ | if($this-> | ||
+ | fputs($fp," | ||
+ | |||
+ | fputs($fp," | ||
+ | } | ||
+ | |||
+ | $this-> | ||
+ | $this-> | ||
+ | |||
+ | while(trim($buf = fgets($fp, | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | while(!feof($fp)) { //내용을 읽어옵니다. | ||
+ | $this-> | ||
+ | } | ||
+ | fclose($fp); | ||
+ | } | ||
+ | |||
+ | function voidParsePage($url, | ||
+ | / | ||
+ | * public | ||
+ | * 파싱하는 부분 main 이 되겠습니다. | ||
+ | * 페이징 처리와 계속 파싱할것인지 결정을 하고 | ||
+ | * 외부함수 처리 역시 여기서 합니다. | ||
+ | * ex) $buf-> | ||
+ | * | ||
+ | * _default_ 오프셋이 있으면 그쪽으로 이동시키고 패턴에 등록된 것만큼 반복을 합니다. | ||
+ | * name, | ||
+ | * name파싱, | ||
+ | * 더이상 내용이 없다면 종료시키거나 페이지설정이 되있다면 | ||
+ | * 다음페이지를 읽어들여서 다시 파싱을 반복하고 페이지가 없을때까지 반복 파싱. | ||
+ | ********************************************************************/ | ||
+ | $this-> | ||
+ | $page_now = $this-> | ||
+ | $page = ''; | ||
+ | $key = array_keys($this-> | ||
+ | $cnt=count($key); | ||
+ | |||
+ | while($this-> | ||
+ | $this-> | ||
+ | $this-> | ||
+ | $parse_count = 0; | ||
+ | $this-> | ||
+ | |||
+ | if($this-> | ||
+ | $this-> | ||
+ | |||
+ | if($this-> | ||
+ | while($this-> | ||
+ | for($i=0; | ||
+ | $this-> | ||
+ | if(!$this-> | ||
+ | if($cnt != count($this-> | ||
+ | unset($this-> | ||
+ | break; | ||
+ | } | ||
+ | $parse_count++; | ||
+ | } | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if($this-> | ||
+ | if($parse_count >= $cnt) { | ||
+ | $page = '&' | ||
+ | $this-> | ||
+ | if($this-> | ||
+ | sleep($this-> | ||
+ | } | ||
+ | else { | ||
+ | $this-> | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | if($this-> | ||
+ | call_user_func($this-> | ||
+ | $this-> | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | function voidGetOffset($str) { | ||
+ | / | ||
+ | * private | ||
+ | * 검색위치를 건너뛰는 부분입니다. | ||
+ | * ex) $buf-> | ||
+ | * 해당문자가 없으면 종료합니다. | ||
+ | ********************************************************************/ | ||
+ | $tmp_offset = strpos($this-> | ||
+ | if($tmp_offset) | ||
+ | $this-> | ||
+ | else | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidGetText($field) { | ||
+ | / | ||
+ | * private | ||
+ | * 패턴 사이의 문자열을 추출하는 부분입니다. | ||
+ | * ex) $buf-> | ||
+ | * 역시나 해당문자가 없으면 종료합니다. | ||
+ | ********************************************************************/ | ||
+ | $spos = strpos($this-> | ||
+ | if(!$spos) { | ||
+ | $this-> | ||
+ | return; | ||
+ | } | ||
+ | $spos += strlen($this-> | ||
+ | |||
+ | $epos = strpos($this-> | ||
+ | if(!$epos) { | ||
+ | $this-> | ||
+ | return; | ||
+ | } | ||
+ | $this-> | ||
+ | |||
+ | $str = substr($this-> | ||
+ | |||
+ | if($this-> | ||
+ | $this-> | ||
+ | else | ||
+ | $this-> | ||
+ | |||
+ | if($this-> | ||
+ | $this-> | ||
+ | } | ||
+ | |||
+ | function voidError($msg) { | ||
+ | exit($msg); | ||
+ | } | ||
+ | } | ||
+ | ?></ | ||
+ | |||
+ | 다운로드에 올릴려다고 허접한 거라서 그냥 여기다 올리네요. | ||
+ | 웹페이지에서 필요한 부분만 가져오는 프로그램을 클래스로 만들어서 | ||
+ | 조금이라도 쉽고 편하게 가져올수 있도록 만들어 봤습니다. | ||
+ | 아 이거 만들때는 스누피가 있는걸 몰라서 걍 만든거니 | ||
+ | 스누피 쓴다니 만다니 라고 말씀하시면 상처입습니다 -ㅂ-; | ||
+ | |||
+ | 간단한 사용설명은------------------------------------------------------------------- | ||
+ | $buf = new GalKuRi;& | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | |||
+ | # | ||
+ | # 파싱된 데이타를 처리하는 방법 | ||
+ | # | ||
+ | $buf-> | ||
+ | |||
+ | # | ||
+ | # voidSetPage(' | ||
+ | # 한페이지 처리시는 괜찬으나 페이지가 많으면 배열이 많이 늘어나니 | ||
+ | # 페이지가 많을 경우에는 외부 함수 사용을 추천 | ||
+ | # | ||
+ | function func(& | ||
+ | $val 결과배열 처리 | ||
+ | } | ||
+ | |||
+ | ---------------------------------------------------------------------------- | ||
+ | # | ||
+ | # 참고 | ||
+ | # 단순히 전체페이지 내용을 원할경우(voidSetPattern 불필요) | ||
+ | # | ||
+ | |||
+ | $buf = new GalKuRi; | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | echo $buf-> | ||
+ | echo $buf-> | ||
+ | |||
+ | ---------------------------------------------------------------------------- | ||
+ | 간단한 예제 몇개. | ||
+ | |||
+ | 스쿨 팁텍 목록 가져오기 | ||
+ | |||
+ | function voidPrint(& | ||
+ | & | ||
+ | } | ||
+ | |||
+ | $buf = new GalKuRi; | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | |||
+ | |||
+ | $buf-> | ||
+ | | ||
+ | |||
+ | 디엡숍 상품 리스트(tv였나.. ㅡㅡ;;) 가져오기 | ||
+ | function voidPrint(& | ||
+ | & | ||
+ | } | ||
+ | |||
+ | $buf = new GalKuRi; | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | |||
+ | 옥션 상품리스트 (무슨상품이었더라... ㅡㅡ;;) 가져오기 | ||
+ | function voidPrint(& | ||
+ | & | ||
+ | } | ||
+ | |||
+ | $buf = new GalKuRi; | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | |||
+ | 네이버 검색 결과페이지 관련키워드 가져오기 | ||
+ | $buf = new GalKuRi; | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | $buf-> | ||
+ | |||
+ | print_r($buf-> | ||
+ | |||
+ | |||
+ | 아.. 개인적으로만 사용가능합니다. | ||
+ | 그리고 악플은 상처받으니 사절이삼~ | ||
+ | |||
+ | $this 가 빠진 메소드가 있어서 소스를 새로 올렸습니다. ㅈㅅ | ||
+ | |||
+ | ^ 누구나 수정하실 수 있습니다. [[http:// | ||
+ | |||