rss 파싱기 실시간으로 변경하는 방법에 대해 조언을 구합니다

rss 파싱기 실시간으로 변경하는 방법에 대해 조언을 구합니다

QA

rss 파싱기 실시간으로 변경하는 방법에 대해 조언을 구합니다

답변 2

본문

https://sir.kr/g5_tip/3716?sfl=wr_subject%7C%7Cwr_content&stx=%EC%8A%A4%EB%88%84%ED%94%BC

 

위에 친절하신 sir 회원님이 rss파싱기를 올려주셔서 너무나도 잘 사용하고 있습니다.

저는 저 파싱기를 feed43으로 rss를 만들어 대학교 공지사항을 제 커뮤니티에 업로드하고 있는데요,,

 

다름이 아니라,

위의 파싱기는 '포스팅 가져오기'를 눌러야 대학교 공지사항들이 제 커뮤니티에 들어오게 되는데

 

혹시 포스팅 가져오기를 누르지 않고, 1시간이나 2시간 간격으로 자동으로 공지사항을

가져오도록 할 수는 없을까요?

학교에 물어보니 rss로 가져가는건 가져가도 된다고 허락을 해주셔서 저작권 문제는 없습니다 ㅠ

 

소르는 아래와 같습니다!

번거로우시겠지만 지식을 주시길 간곡히 부탁드립니다 ㅠㅠㅠ

 


<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("rss 주소"); //★★ 끌어올 RSS 주소 입력 
    $table = "게시판 테이블";                                             //★★ 입력할 테이블 이름 입력 
 
     $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->title."',  '".$contt."',  '".$item->link."','".RAND(10,20)."', '".G5_TIME_YMDHIS."'
                )";
                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>";
}
 ?>
 

 

 

이 질문에 댓글 쓰기 :

답변 2


<a href='?rss=get'>포스팅 가져오기</a>";

이부분을 보시면 페이지를 호출할때

http://호출되는페이지주소?rss=get 이라고 호출하면 됩니다.

간단하게 하면

<meta http-equiv="refresh" content="리프레쉬초;url=호출될주소?rss=get">

이런식으로 하고 호출된 주소에 자기자신의 주소를 넣으면 계속 일정시간마다 가져올겁니다.

<meta http-equiv="refresh" content="리프레쉬초;url=호출될주소?rss=get">
이부분을 제일 상단에 넣으신거 맞으신거죠?

에러 내용만 봐서는 "," 또는 ";" 를 빼먹었다는 뜻인데

content 중간에 ";" 콜론 빠졌는지 정확히 초;url=주소 정확히 봐주세요 ^^

친절하게 계속 답변해주셔서 너무 감사드립니다 ㅠ
말씀해주신대로 제일 상단에 해당 문구를 삽입하였는데
이제 에러는 뜨지 않지만 이전처럼
'포스트 가져오기'를 눌러야 rss를 가져오네요..

설명해주신 것 처럼 자동으로 실행되면서 rss를 가져오게 하고싶은데
초보인 입장에서는 정말 막막하기만 하네요 ㅠ


<meta http-equiv="refresh" content="3600;url=호출될 주소?rss=get">
<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("호출될 주소"); //★★ 끌어올 RSS 주소 입력 
	$table = "테이블 명"; 											//★★ 입력할 테이블 이름 입력 
 
 	$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->title."',  '".$contt."',  '".$item->link."','".RAND(10,20)."', '".G5_TIME_YMDHIS."'
				)";

				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>";
}

 ?>
 


이렇게 되어있습니다..

간단한 거라 간단하게 답을 드렸는데
간단히 해결이 안되니 저도 난감하네요 ^^
아마도 너무나도 당연한것을 간과한듯 싶은데 장님 문고리 잡기 마냥 되버리네요 ㅋㅋ
질문자가 답변자보다 먼저 포기하면 안되요 :D

에러가 안나왔다면 일단 제대로 된거 같네요
3600 초면 한시간인가요?
한시간 있다 테스트는 힘드실테니까 일단 5 해서 5초후에 실행되는지 확인해보시고 되면 3600 으로 바꾸세요 ^^
앗 그러고 보니 호출주소를 저렇게 쓰신건가요?


<meta http-equiv="refresh" content="5;url=./get_rss.php?rss=get">

이렇게 쓰셔야죠

추가로 답하자면
meta 태그는 그 코드가 바로 실행되는게 아니라 설정된 시간이 지난뒤에 다시 로딩될때
rss=get 을 붙여 실행하도록 하는겁니다.
그래서 그 페이지를 호출하는 순간에는 rss 를 가져오지 않습니다.

설정된 시간 - 님의 경우에는 한시간 - 이 지난후에 rss 를 가져오는거니 테스트가 제대로 될리 없습니다. ^^

우와! 말씀해주신대로 설정하니 정말 5초마다 자동으로 불러옵니다 ㅠㅠㅠㅠ 감격!!
정말정말 감사드립니다 ㅠㅠㅠㅠ

저 혹시 정말 죄송하지만 마지막으로 하나만 더 여쭈어봐도 괜찮을까요?
현재 get_rss.php를 실행시켜서 포스트 가져오기를 누르지 않고도
 5초뒤에 자동으로 받아오게 되었는데요,

혹시 get_rss.php를 실행하지 않고도 (예를들면 브라우져에서 ~~/get_rss.php를 입력하여 실행하지 않고도) 자동으로 백그라운드에서 글을 받아오게 할 수는 없을까요?

아까 get_rss.php를 실행하지 않고 그냥 놔둬봤는데 실행하지 않고서는
rss를 불러오지 않더라구요 ㅠ...
질문이 길어져서 정말 죄송합니다 ㅠ

친절한 응원 감사드립니다 ㅎㅎㅎ
안타깝게도 이윰빌더에서는 m3cron이 동작하지 않네요 ㅎㅎ;;;;;
다른 방법을 더 공부해 봐야 할 것 같지만 나시님께 많이 배웠으니
충분히 성과를 얻었습니다.
다시한번 도움주셔서 정말 감사드립니다!

https://sir.kr/g5_plugin/3808

이런거 만들어서 몇시간 간격으로 해당파일이 실행되어서 rss를 가져오도록 하세요

답변을 작성하시기 전에 로그인 해주세요.
전체 3
© SIRSOFT
현재 페이지 제일 처음으로