채택완료

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꺼 필요한거 소스인데요.

 

Copy
<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 적용소스인데요.

 

Copy
<meta charset="utf-8"><?phpdefine('_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개 / 댓글 1개

채택된 답변
+20 포인트
그냥 파싱함수를 만드시는게 어떨까합니다

explode&nbsp; str_replace등 몇가지 기본함수루 만들어서

php로 sort는 쉽지만&nbsp; 페이징된파일을 또 가져올경우

의미가없으니

일단 db에 저장해서&nbsp; (재)를&nbsp; 제외한&nbsp; 데이타를 지워버리는

방식이면 무난히 저장이가능할겁니다

제경우는 그렇게 했습니다

답변에 대한 댓글 1개

감사합니다. 한번해봐야되겠네요 ^^

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