테스트 사이트 - 개발 중인 베타 버전입니다

파싱기 소스한번 봐주세요 ㅠㅠ 채택완료

똔삐룸 8년 전 조회 3,384

안녕하세요?

얼마전에 컴퓨터공학과에 다니는 친구한테 파싱 이야기를 했더니

소스를 보내줬는데요..

이걸 사용하려고 하니 오류가 뜨는것도 아니고

익스플로러 하단 상태표시줄에 사이트 응답을 기다리는중.. 만 뜨고있네요

제가 파싱하려는 곳은 저희 대학교 홈페이지의 학사공지 게시판인데,

일단 제가 받은 원본 소스에는 dc인사이드가 들어가 있어서

그냥 그대로 올려봅니다

사이트나 이것저것은 제가 수정하면 되는데

소스 자체가 뭔가 잘못된것 같아서,

이 소스를 준 친구한테 물어보려니 어제 유학을 가버려

물어볼 수가 없네요..ㅠ

고수분의 답변을 기다리겠습니다..


</p><p><meta charset="utf-8"></p><p><?php</p><p>define('_INDEX_', true);</p><p>include_once('./_common.php');</p><p>
</p><p>include "lib/Snoopy.class.php";</p><p>$snoopy = new Snoopy;</p><p>
</p><p>
</p><p>if($snoopy->fetch("<a href="<a href="http://gall.dcinside.com/board/lists/?id=ib&page=2" target="_blank" rel="noopener noreferrer">http://gall.dcinside.com/board/lists/?id=ib&page=2</a>"><a href="http://gall.dcinside.com/board/lists/?id=ib&page=2" target="_blank" rel="noopener noreferrer">http://gall.dcinside.com/board/lists/?id=ib&page=2</a></a>")){ </p><p>    // other methods: fetch, fetchform, fetchlinks, submittext and submitlinks</p><p>  </p><p>   </p><p>include "lib/simple_html_dom.php";   </p><p>$html =new simple_html_dom();  //돔 객체 생성</p><p>$html->load($snoopy->results); // 로드 함수 호출하여 스누피 결과값 입력\</p><p> </p><p> </p><p> </p><p>   </p><p> </p><p> </p><p> </p><p>$lists=$html->find('tr[class=tb]'); // selector를 이용하여 요소값 인식</p><p> </p><p> </p><p>$pattern = "/<td\sclass=\"t_notice\">공지.+<\/tr>/"; //공지제거</p><p> </p><p>$lists= preg_replace($pattern,"",$lists);</p><p> </p><p>   </p><p>foreach($lists as $list){</p><p>   </p><p> </p><p>$list = str_replace('a href="/','a href="<a href="<a href="http://gall.dcinside.com/" target="_blank" rel="noopener noreferrer">http://gall.dcinside.com/</a>"><a href="http://gall.dcinside.com/" target="_blank" rel="noopener noreferrer">http://gall.dcinside.com/</a></a>', $list);  //경로수정</p><p> </p><p> </p><p> </p><p> </p><p>//echo $list.  "";// 리스트 출력 </p><p> </p><p> </p><p>$htm = str_get_html($list); // 리스트에서 주소뽑기1</p><p> </p><p>foreach($htm->find('a[class=icon_txt_n]') as $ctitle)</p><p> </p><p>$newtitle = $ctitle ->plaintext;</p><p> </p><p>foreach($htm->find('a') as $a){  </p><p> </p><p> </p><p> </p><p>$contents = test(utf8_decode($a->href)); //주소뽑기2</p><p> </p><p> </p><p>$pattern = array('/- dc official App/'); </p><p> </p><p>$conresult = mb_strimwidth(preg_replace($pattern,'- 이윰',$contents->plaintext),0,700,'');</p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p>}</p><p>    </p><p> </p><p>}</p><p> </p><p> </p><p>}</p><p> </p><p>else {</p><p>    print "Snoopy: error while fetching document: ".$snoopy->error."\n";</p><p>}</p><p> </p><p>  </p><p> </p><p> </p><p>//게시판 입력관련///////////////////////////////////////////////</p><p>function insert_write($newpost)</p><p>{</p><p>  global $g5;</p><p>   </p><p>  //게시판 테이블 정보</p><p>  $bo_table = $newpost[bo_table];</p><p>  if(!strlen($bo_table)) return FALSE; //bo_table 값이 지정되지 않았습니다.</p><p>  $board = sql_fetch(" select * from {$g5['board_table']} where bo_table = '$bo_table' ");</p><p>  if(!$board) return FALSE; //bo_table이 존재하지 않습니다.</p><p>     </p><p>  //회원정보 및 권한 확인</p><p>    $member = get_member($newpost[mb_id]);</p><p>    if(!$member) return FALSE; //mb_id가 존재하지 않습니다.</p><p>    //if($board[bo_write_level] > $member[mb_level]) return FALSE; //글쓰기 권한이 없습니다.</p><p>     </p><p>  //카테고리 설정</p><p>    $ca_name = $newpost[ca_name];</p><p>  if ($ca_name && strpos($board[bo_category_list], $ca_name) === FALSE){</p><p>    $category_list = $board[bo_category_list]."|".$ca_name;</p><p>    $sql = " update {$g5['board_table']} set bo_category_list = '$category_list' where bo_table = '$bo_table' ";</p><p>    sql_query($sql);</p><p>  }</p><p>   </p><p>  //변수 정리</p><p>    $write_table = $g5[write_prefix].$bo_table;</p><p>    $wr_num = get_next_num($write_table);</p><p>    $ca_name = addslashes($ca_name);</p><p>    $html = "html1";</p><p>    $secret = "";</p><p>    $mail = "";</p><p>    $wr_subject = addslashes(trim($newpost[wr_subject]));</p><p>    $wr_content = addslashes(trim($newpost[wr_content]));</p><p>    if(!$wr_subject) return FALSE; //글 제목이 없습니다.</p><p>    if(!$wr_content) return FALSE; //글 내용이 없습니다.</p><p>    $mb_id = $member[mb_id];</p><p>    $wr_password = $member[mb_password];</p><p>    $wr_name = $board[bo_use_name] ? $member[mb_name] : $member[mb_nick];</p><p>  $wr_email = $member[mb_email];</p><p>  $wr_homepage = $member[mb_homepage];</p><p>    for($i=1; $i<=10; $i++){</p><p>        $wr = "wr_{$i}";</p><p>        ${$wr} = addslashes($newpost[$wr]);</p><p>    }</p><p>    $wr_link1 = $newpost[wr_link1];</p><p>    $wr_link2 = $newpost[wr_link2];</p><p>     </p><p>  //글 입력하기</p><p>  $sql = " insert into $write_table</p><p>                set wr_num = '$wr_num',</p><p>                     wr_reply = '',</p><p>                     wr_comment = 0,</p><p>                     ca_name = '$ca_name',</p><p>                     wr_option = '$html,$secret,$mail',</p><p>                     wr_subject = '$wr_subject',</p><p>                     wr_content = '$wr_content',</p><p>                     wr_link1 = '$wr_link1',</p><p>                     wr_link2 = '$wr_link2',</p><p>                     wr_link1_hit = 0,</p><p>                     wr_link2_hit = 0,</p><p>                     wr_hit =  '" . rand(100, 200) . "',</p><p>                     wr_good = 0,</p><p>                     wr_nogood = 0,</p><p>                     mb_id = '$mb_id',</p><p>                     wr_password = '$wr_password',</p><p>                     wr_name = '$wr_name',</p><p>                     wr_email = '$wr_email',</p><p>                     wr_homepage = '$wr_homepage',</p><p>                     wr_datetime = '".G5_TIME_YMDHIS."',</p><p>                     wr_last = '".G5_TIME_YMDHIS."',</p><p>                     wr_ip = '{$_SERVER['REMOTE_ADDR']}',</p><p>                     wr_1 = '$wr_1',</p><p>                     wr_2 = '$wr_2',</p><p>                     wr_3 = '$wr_3',</p><p>                     wr_4 = '$wr_4',</p><p>                     wr_5 = '$wr_5',</p><p>                     wr_6 = '$wr_6',</p><p>                     wr_7 = '$wr_7',</p><p>                     wr_8 = '$wr_8',</p><p>                     wr_9 = '$wr_9',</p><p>                     wr_10 = '$wr_10' ";</p><p>    sql_query($sql);</p><p>       </p><p>    $wr_id = sql_insert_id();</p><p>   </p><p>    sql_query(" update $write_table set wr_parent = '$wr_id' where wr_id = '$wr_id' "); //부모 아이디에 UPDATE</p><p>  sql_query(" insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '{$bo_table}', '{$wr_id}', '{$wr_id}', '".G5_TIME_YMDHIS."', '$mb_id' ) "); //새글 INSERT    </p><p>    sql_query(" update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '{$bo_table}' "); //게시글 1 증가</p><p>     </p><p>  return array('bo_table' => $bo_table, 'wr_id' => $wr_id, 'sca' => $ca_name);</p><p>  //return TRUE;</p><p>     </p><p>}</p><p>   </p><p>   </p><p> </p><p>   </p><p>$timg = array('/img/1.png', '/2.png');</p><p>   </p><p>$ttitle = array('1', '2', '3');</p><p>   </p><p>$ttitle_cnt = sql_fetch(" select tp_cnt from tp_title_cnt ");</p><p>if (count($ttitle) > $ttitle_cnt['tp_cnt'])</p><p>  sql_query(" update tp_title_cnt set tp_cnt = tp_cnt + 1 ");</p><p>if (count($ttitle) == ($ttitle_cnt['tp_cnt']+1))</p><p>  sql_query(" update tp_title_cnt set tp_cnt = 0 ");</p><p> </p><p> </p><p> </p><p>//$newpost[mb_id], $newpost[bo_table], $newpost[wr_subject], $newpost[wr_content] 값만 지정하고,</p><p>//insert_write($newpost); 라고 실행시키면 글이 해당 게시판에 올라갑니다.</p><p> </p><p>$newpost = array(</p><p>  'mb_id' => 'admin',</p><p>  'bo_table' => $_REQUEST['board_type'],</p><p>  'wr_subject' => $newtitle,</p><p>  'wr_content' => $conresult</p><p>);</p><p> </p><p> </p><p> $result = insert_write($newpost);</p><p> </p><p> </p><p> </p><p> </p><p> </p><p>//게시판 입력관련 끄으으읕///////////////////////////////////////////////</p><p> </p><p> </p><p>   </p><p>//링크안에 내용 구하기 a->href 상세데이터를 파싱해서 상세데이터를 리턴함</p><p>function test($link) {</p><p> </p><p> </p><p>$snoopy  = new Snoopy;</p><p> </p><p>  </p><p>$detail_content;</p><p>if(strstr($link, 'javascript')) return false;</p><p>if($snoopy->fetch($link)){ </p><p>    // other methods: fetch, fetchform, fetchlinks, submittext and submitlinks</p><p>  $html =new simple_html_dom();  //돔 객체 생성</p><p>  $html->load($snoopy->results); // 로드 함수 호출하여 스누피 결과값 입력\</p><p> </p><p>//</p><p>$contents=$html->find('div[class=s_write]'); // selector를 이용하여 요소값 인식</p><p> </p><p> </p><p> </p><p> </p><p> </p><p>foreach($contents as $list){</p><p>   </p><p>  $detail_content = $list;</p><p>  //경로수정</p><p>  //$list = str_replace('a href="/','a href="<a href="<a href="http://gall.dcinside.com/" target="_blank" rel="noopener noreferrer">http://gall.dcinside.com/</a>"><a href="http://gall.dcinside.com/" target="_blank" rel="noopener noreferrer">http://gall.dcinside.com/</a></a>', $list);  //경로</p><p>}</p><p> </p><p>} //snoop use check</p><p> </p><p>    return $detail_content;</p><p>}</p><p>
</p><p> ?></p><p>

댓글을 작성하려면 로그인이 필요합니다.

답변 1개

채택된 답변
+20 포인트
그누위즈

그 소스를 응용해서 본인이 원하는 사이트의 html 구조를 분석하여

정규식 이용해서 특정 부분의 게시글 제목, 내용, 작성자 등을 가져오셔야합니다.

파싱이라는것은 소스는 많이 있지만

그 사이트마다 구조에 따라서 변형을 해서 사용하는 작업이 귀찮은 작업입니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인