차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 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:// | ||
| + | |||