snoopy 파싱관련하여 문의드립니다.

snoopy 파싱관련하여 문의드립니다.

QA

snoopy 파싱관련하여 문의드립니다.

본문

안녕하세요. 현재 http://sir.kr/g5_tip/3716?sfl=wr_subject%7C%7Cwr_content&stx=snoo 이분꺼로,

 

http://www.kbs.co.kr/schedule/schedule_channel.html KBS 편성표에서 [재]라고 써있는 재방송관련 프로그램명 / 날짜 / 시간 을 가져와서 DB로 저장하고 싶은데요.

 

어떻게해야될까요?

 

아래꺼는 KBS꺼 필요한거 소스인데요.

 


<meta http-equiv="Content-Type" content="text/html;charset=euc-kr">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<script type="text/javascript" src="http://www.kbs.co.kr/jquery/jquery-1.8.3.min.js"></script>
<script type="text/javascript" src="http://www.kbs.co.kr/jquery/jquery.easing.1.3.min.js"></script>
<script type="text/javascript" src="http://www.kbs.co.kr/jquery/jquery.cookie.min.js"></script>
<script type="text/javascript" charset="euc-kr" src="http://www.kbs.co.kr/jquery/jquery.snsShare.min.js"></script>
<script type="text/javascript" charset="euc-kr" src="http://www.kbs.co.kr/include/inc13/service/service.obj.js"></script>
<script type="text/javascript" charset="euc-kr" src="http://www.kbs.co.kr/common/inc13/common.min.js"></script>
<link rel="stylesheet" type="text/css" href="http://www.kbs.co.kr/css/inc/inc13/common.css">
<link rel="shortcut icon" href="http://www.kbs.co.kr/favicon.ico">
<meta property="og:image" content="http://img.kbs.co.kr/cms/image/kbs_facebook.jpg">
<script type="text/javascript" src="http://www.kbs.co.kr/jquery/jquery.easing.1.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.18/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://www.kbs.co.kr/jquery/jquery.easing.1.3.min.js"></script>
<script src="http://code.jquery.com/ui/1.8.18/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript" charset="euc-kr" src="/js/2015_common.js"></script>
<script type="text/javascript" charset="euc-kr" src="/js/jquery.printGnb.min.js"></script>
<script type="text/javascript" charset="euc-kr" src="http://www.kbs.co.kr/jquery/jquery.slides.min.js"></script>
<script type="text/javascript" charset="euc-kr" src="/js/Gnb_string_v3.obj.js"></script>
<script type="text/javascript" charset="euc-kr" src="/js/Gnb_script_v3_edit.js"></script>
<script type="text/javascript" charset="euc-kr" src="/js/top_navi_common.js"></script>
<link rel="stylesheet" type="text/css" href="/css/inc/gnb15/common.css">
<link rel="stylesheet" href="http://code.jquery.com/ui/1.8.18/themes/base/jquery-ui.css" type="text/css" media="all" />
<link rel="shortcut icon" href="http://www.kbs.co.kr/favicon.ico">
<meta property="og:image" content="http://img.kbs.co.kr/cms/image/kbs_facebook.jpg">
<link rel="stylesheet" type="text/css" href="http://www.kbs.co.kr/css/kbs_css_m/css_m_15/2015_schedule.css">
<script language="javascript" type="text/javascript">
//<![CDATA[
var serverTime = "2016-05-01 00:32:52";   // "2016-05-01T00:32:52Z";
//]]>
</script>
<script type="text/javascript" charset="euc-kr" src="http://www.kbs.co.kr/js/jquery.printBroadcast.js"></script>
<script language="javascript" type="text/javascript">
//<![CDATA[
var changeCalender = function(today){
 var week = new Array('일', '월', '화', '수', '목', '금', '토');
 $(".day_list>li").each(function(){
  if(this.className.indexOf("prev")>=0 || this.className.indexOf("next")>=0){
   if(this.className.indexOf("prev")>=0){
    var speed = -this.className.replace("prev_","");
   }else if(this.className.indexOf("next")>=0){
    var speed = this.className.replace("next_","");
   }
   var a_myDate = new Date(today);
   a_myDate.setDate(a_myDate.getDate() + parseInt(speed));
   var a_month = a_myDate.getMonth()+1;
   if(a_month < 10){
    a_month = "0" + a_month;
   }
   var a_day = a_myDate.getDate();
   if(a_day < 10){
    a_day = "0" + a_day;
   }
   var a_year = a_myDate.getFullYear();
   
   $(this).html('<a href="#" class="'+this.className+'" onclick="changeCalender(\''+a_year +"/"+a_month+"/"+a_day+'\');return false;"><span class="date">'+a_day+'</span><span class="day">'+week[a_myDate.getDay()]+'</span></a>');
  }else if(this.className == "today"){
   var myDate = new Date(today);
   var month = myDate.getMonth()+1;
   if(month < 10){
    month = "0" + month;
   }
   var day = myDate.getDate();
   if(day < 10){
    day = "0" + day;
   }
   
   var year = myDate.getFullYear();
   $(this).html('<a href="#" class="today"><span class="date">'+year +"."+month+"."+day +'</span><span class="day">('+week[myDate.getDay()]+')</span></a>');
  }
 });
 schedule_cannel_init(today);
}
var today_myDate = new Date(serverTime);
today_myDate.setHours(today_myDate.getHours() - 14);
var today_month = today_myDate.getMonth()+1;
if(today_month < 10){
 today_month = "0" + today_month;
}
var today_day = today_myDate.getDate();
if(today_day < 10){
 today_day = "0" + today_day;
}
var today_year = today_myDate.getFullYear();
function getTodayList(date){
 var today = today_year + "/" + today_month + "/" + today_day
 if(date) {
  changeCalender(date); 
 }else{
  changeCalender(today);
  setTimeout(function(){scrollMoveOn()}, 1000);
 }
}

$(function() {
 var yoil = getDate_now.getDay();
 switch(yoil){
  case 1 : yoil = '4D'; break;
  case 2 : yoil = '3D'; break;
  case 3 : yoil = '2D'; break;
  case 4 : yoil = '1D'; break;
  case 5 : yoil = '0D'; break;
  case 6 : yoil = '9D'; break;
  case 7 : yoil = '8D'; break;
 }
 $( "#datepicker" ).datepicker({
  closeText: '닫기',
  prevText: '이전달',
  nextText: '다음달',
  currentText: '오늘',
  monthNames: ['1월(JAN)','2월(FEB)','3월(MAR)','4월(APR)','5월(MAY)','6월(JUN)',
  '7월(JUL)','8월(AUG)','9월(SEP)','10월(OCT)','11월(NOV)','12월(DEC)'],
  monthNamesShort: ['1월','2월','3월','4월','5월','6월',
  '7월','8월','9월','10월','11월','12월'],
  dayNames: ['일','월','화','수','목','금','토'],
  dayNamesShort: ['일','월','화','수','목','금','토'],
  dayNamesMin: ['일','월','화','수','목','금','토'],
  weekHeader: 'Wk',
  dateFormat: 'yy/mm/dd',
  firstDay: 0,
  isRTL: false,
  showMonthAfterYear: true,
  yearSuffix: '',
  changeMonth: true,
  changeYear: true,
  showButtonPanel: true,
//  minDate: '-6M+3D',
  minDate: new Date(today_myDate.getFullYear(), today_myDate.getMonth()-5, 1),
  maxDate: yoil
 });
 $( "#datepicker" ).on("change",function(){
  changeCalender(this.value);
 });
});
//]]>
</script>
</head>
<body>
<!-- 본문 시작 -->
  <div id="container" class="container_schedule">
   <div class="content">
    <div class="schedule_wrap schedule_time">
     <div class="list_day_wrap">
      <ul class="btn_day_wrap">
       <li class="btn_calendar"><a href="#"><input type="text" id="datepicker" class="it " title="" value="" name=""/>달력</a></li>
       <li class="btn_today"><a href="#" onclick="getTodayList();return false;">오늘</a></li>
      </ul>
      <!-- 날짜리스트 -->
      <ul class="day_list">
       <li class="prev_3"><a href="#"><span class="date">28</span><span class="day">금</span></a></li>
       <li class="prev_2"><a href="#"><span class="date">29</span><span class="day">토</span></a></li>
       <li class="prev_1"><a href="#"><span class="date">30</span><span class="day">일</span></a></li>
       <li class="today"><a href="#"><span class="date">2014.12.01</span><span class="day">(월)</span></a></li>
       <li class="next_1"><a href="#"><span class="date">02</span><span class="day">화</span></a></li>
       <li class="next_2"><a href="#"><span class="date">03</span><span class="day">수</span></a></li>
       <li class="next_3"><a href="#"><span class="date">04</span><span class="day">목</span></a></li>
      </ul><!-- //날짜리스트 -->
      <ul class="list_type_wrap">
       <li class="btn_time"><a href="http://www.kbs.co.kr/schedule/schedule_time.html" title="다채널">동시간 다채널 편성표 보기</a></li>
       <li class="btn_channel on"><a href="http://www.kbs.co.kr/schedule/schedule_channel.html" title="채널별">채널별 편성표 보기</a></li>
      </ul>
     </div>
     
     
     <!-- 프로그램 리스트 -->
     <div class="list_program_wrap ch11">
      <ul class="list_program">
       
      </ul>
     </div><!-- //프로그램 리스트 -->
<script language="javascript" type="text/javascript">
//<![CDATA[
var default_channel = '12';
var default_date = today_year+today_month.toString()+today_day;
var getAuthURI = function(planned_day , channel_code){
 return 'http://smartapi.kbs.co.kr/kbshome/broadcast/schedule/home_list.json?tstamp=1462030372&ssign=KXD5yXijsrNeY1YEQSf5GLhLTBarAL9Lr8vIWb03dNs=&programming_local_station_code_matching=00&planned_day='+planned_day+'&channel_code='+ channel_code 
}
function schedule_cannel_init(setDate){
 setDate = setDate.replace(/[/]/g,"");
 //alert(default_channel +"---"+setDate)
 $(".list_program").printBroadcast(default_channel,'channel', getAuthURI(setDate,default_channel),function(elem){});
}
function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return null;
  else
    return results[1];
}
if(gup("channel")){
 default_channel = gup("channel");
 $("#tit_channel_img")[0].src =  "http://img.kbs.co.kr/cms/image/main_img15/tit_channel_"+default_channel+".gif"
}
$(function(){
getTodayList();
setTimeout(function(){scrollMoveOn()}, 1000);
})
function scrollMoveOn(){
 var top = ($('.list_program > li.on').offset() || { "top": NaN }).top;
 $("body, html").animate({scrollTop: top});
}
$(".channel_info_wrap .btn_mov_channel").click(function(){
 if(!this.now) return false;
 default_channel = this.now;
// schedule_cannel_init(default_date);
 var settingDate = $(".today > span.date").text();
 settingDate = settingDate.replace(/[.]/g,"/");
 schedule_cannel_init(settingDate);
 $("#tit_channel_img")[0].src =  "http://img.kbs.co.kr/cms/image/main_img15/tit_channel_"+this.now+".gif"
 $('.list_program_wrap').attr('class', 'list_program_wrap ch'+default_channel);
 getTodayList(settingDate);
 setTimeout(function(){scrollMoveOn()}, 1000);
 return false;
});
$(".list_channel a").click(function(){
 var channel = this.getAttribute('channel_code');
 var actionBtn = $(".channel_info_wrap .btn_mov_channel")[0];
 $("#tit_channel_select").html(this.innerHTML);
 actionBtn.now = channel;
 actionBtn.txt = this.innerHTML;
 $('.list_channel').slideToggle('fast');
// $('.list_program_wrap').attr('class', 'list_program_wrap ch'+channel);
 return false;
});
 
//]]>
</script>
       

 

이부분은 위에 snoopy 적용소스인데요.

 


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

 $snoopy->fetch("주소");  
 $table = "schedule";            
 
$title=explode("<ul class=\"list_program\">",$snoopy->results); 
$title=explode("</ul>",$title[1]); 
echo $title[0]; 
 $txt =  $snoopy->results;
 
 $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

그냥 파싱함수를 만드시는게 어떨까합니다
explode  str_replace등 몇가지 기본함수루 만들어서
php로 sort는 쉽지만  페이징된파일을 또 가져올경우
의미가없으니
일단 db에 저장해서  (재)를  제외한  데이타를 지워버리는
방식이면 무난히 저장이가능할겁니다
제경우는 그렇게 했습니다
답변을 작성하시기 전에 로그인 해주세요.
전체 18
QA 내용 검색

회원로그인

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