안녕하세요! rss 파싱 질문드립니다 ㅠㅠ

안녕하세요! rss 파싱 질문드립니다 ㅠㅠ

QA

안녕하세요! rss 파싱 질문드립니다 ㅠㅠ

본문

안녕하세요?

초보자인 제가 학교 홈페이지를 대상으로 rss 파싱을 시도하다

도저히 답이 안나와서 고수님께 조언을 구하고자 글을 써봅니다 ㅠ...


학교 홈페이지는 보안 문제가 있어서

다른 예시로 제 상황을 설명드리자면...


http://www.dogdrip.net/consultation 라는 사이트가 rss를 제공해 주고 있습니다.

해당 rss 주소는 http://www.dogdrip.net/consultation/rss 입니다.

이것을 sir 홈페이지에 올라와 있는 rss 수집기로 수집을 해서 DB에 넣어보았습니다.

(사용한 수집기 : https://sir.kr/g5_tip/3716?page=7 )


그런데 rss 사이트를 보시면 아시겠지만, 제목과 내용이 있는데

내용이 완전하지가 않고 중간에 끊어진 미완성 내용입니다. (글자수가 제한되어 제시해주는거 같아요)

그래서 rss에 나와있는 게시글들의 링크를 파싱해서(접속해서) 게시글의 제목, 본문을 따오려고 하는데

(예를들면, rss에서 주어진 http://www.dogdrip.net/139637136 라는 게시글 링크주소)

지금까지 단 한번의 성공도 하지 못했습니다...


도대체 어떻게 해야할까요 ㅠㅠㅠ...

농담이 아니라 sir에서 파싱, 크롤링 검색해서 나온 글들 거의 다 봤고

네이버, 구글에서도 관련 내용들을 찾아보았지만 비전공자인 제가 따라하기에는 너무나도 벅찼습니다 ㅠ

그래서 너무나도 죄송스럽지만 전공자분들께 조언을 구하고자 합니다 너무 죄송합니다..


아래는 제가 사용한 rss 수집기의 소스입니다.

어떻게 하면 rss의 게시글 링크를 통해 게시글 제목과 내용을 파싱할 수 있을까요...?

아래의 수집기로 그누보드5 db에 집어넣으니

제목과 날짜는 잘 입력되나, 조회수가 1,231처럼 천단위로 입력되고 닉네임은 불러오지를 못하네요..

실제 조회수는 30수준인데 ㅠ...

조언 기다리고 있을게요.. 다시한번 답변을 달아주실 고수분께 감사하다는 말씀 드립니다.




<meta charset="utf-8">
<?php
define('_INDEX_', true);
include_once('./_common.php');
if(isset($_GET['rss'])){
 
 include "lib/Snoopy.class.php";
 $snoopy = new Snoopy;

 $snoopy->fetch("http://www.dogdrip.net/consultation/rss"); //★★ 끌어올 RSS 주소 입력 
 $table = "rss";            //★★ 입력할 테이블 이름 입력 
 
  $xml = @simplexml_load_string($snoopy->results);
   foreach ($xml->channel->item as $key) {
      $xml2[]=$key ;
  }
  $xml = array_reverse($xml2);
 
 $all_data=0; //불러온  테이터 갯수 초기화 
 $sec_data=0; //DB에 입력한 데이터 갯수 초기화 
   $wrnum=sql_fetch_array(sql_query("SELECT * FROM `g5_write_".$table."` order by `wr_num`"));
  if($wrnum['wr_num']==""){
   $wrnum['wr_num']= -1;
  }else{
   $wrnum['wr_num']=$wrnum['wr_num']+1;
  }
  /*
  $wrid=sql_fetch_array(sql_query("SELECT * FROM `g5_write_".$table."` order by `wr_id`"));
  if($wrid['wr_id']==""){
   $wrid['wr_id']= 1;
  }
  */
 foreach($xml as $item) {
  $all_data=$all_data+1;
  $chklink_sql="SELECT * FROM `g5_write_".$table."` WHERE `wr_link1`='".$item->link."'"; //이미 불러왔었던 포스팅 인지 확인 -질의문 
  $chk_q=sql_query($chklink_sql);      //이미 불러왔었던 포스팅 인지 확인 -질의문 쿼리 
  if($chk_q->num_rows<1){         //검색결과 합이 1건 이하일때만 db에 입력  
     
   $trans = array("'" => "\"");     //내용중 기호 ' 가 있으면 " 로 변환 시킴 변환하지 한다고 정의 .
   $contt = strtr($item->description, $trans);  //내용중 기호 ' 가 있으면 " 로 변환 시킴.
   
   $str_date = $item->pubDate;    // 날자 포맷 할거임 
   $date = date("Y-m-d H:t:s", strtotime( $str_date ) ); //Wed, 30 Sep 2015 11:48:17 +0900 => 1900-01-01 12:00:00 이런식으로
     
     $sql="INSERT INTO `g5_write_".$table."` (
    `wr_num` ,
    `wr_option` ,
    `wr_name` ,
    `wr_subject` ,
    `wr_content` ,
    `wr_link1` ,
    `wr_hit` ,
    `wr_datetime`
    )
    VALUES ('".$wrnum['wr_num']."','html1','".$item->author."','".$item->title."',  '".$contt."',  '".$item->link."','".RAND(1000,4000)."', '".$date."'
    )";
    if(sql_query($sql)){
       $wr_id = sql_insert_id();
        sql_query("update `g5_write_".$table."` set wr_parent = '".$wr_id."' ,wr_num = '".-$wr_id."' where wr_id = '".$wr_id."' "); //wr_parent update
     sql_query("insert into {$g5['board_new_table']} ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values ( '".$table."', '".$wr_id."', '".$wr_id."', '".G5_TIME_YMDHIS."', '".$item->author."' ) "); //new     
        sql_query("update {$g5['board_table']} set bo_count_write = bo_count_write + 1 where bo_table = '".$table."' "); //write_count ++
      $sec_data=$sec_data+1;
      $wrnum['wr_num'] = $wrnum['wr_num']-1 ;
      /*$wrid['wr_id'] = $wrid['wr_id']+1 ;*/
     
    };
    
    
  }

   
 }
 echo  $msg = "총 불러온 포스팅 [".$all_data."] 건 중 DB에 [".$sec_data."] 건 입력 하였습니다.  ";
 echo "<br>";
 echo " <a href='".G5_BBS_URL."/board.php?bo_table=".$table."'>게시판으로 가기</a>";
}else{
 echo "<a href='?rss=get'>포스팅 가져오기</a>";
}
 ?>
 

이 질문에 댓글 쓰기 :

답변 1

그곳에서 제공되는 rss가 그렇다면 더 이상 내용을 가져올 수는 없습니다.

구지 갖어 와야 한다면 게시판 자체를 파싱해야하죠.

리스트페이지를 가져와 뷰페이지 주소를 가지고 내용을 파싱하던

직접 뷰페이지를 가져와 파싱해 올리는 수 밖에요.


간절하시겠지만 제가 볼때는 그렇네요.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,123 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT