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

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

똔삐룸 7년 전 조회 3,386

https://sir.kr/g5_tip/3716?sfl=wr_subject%7C%7Cwr_content&stx=%EC%8A%A4%EB%88%84%ED%94%BC" target="_blank">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로 가져가는건 가져가도 된다고 허락을 해주셔서 저작권 문제는 없습니다 ㅠ

 

소르는 아래와 같습니다!

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

 

</p>

<p><meta charset="utf-8">

<?php

define('_INDEX_', true);

include_once('./_common.php');</p>

<p>if(isset($_GET['rss'])){

    </p>

<p>    include "lib/Snoopy.class.php";

    $snoopy = new Snoopy;</p>

<p>

    $snoopy->fetch("<a href="<a href="http://feed43.com/3327665240088456.xml" target="_blank" rel="noopener noreferrer">http://feed43.com/3327665240088456.xml</a>" target="_blank">r</a>ss 주소"); //★★ 끌어올 RSS 주소 입력 

    $table = "게시판 테이블";                                             //★★ 입력할 테이블 이름 입력 

 

     $xml = @simplexml_load_string($snoopy->results);</p>

<p>         foreach ($xml->channel->item as $key) {

            $xml2[]=$key ;

        }

        $xml = array_reverse($xml2);

 

    $all_data=0; //불러온  테이터 갯수 초기화 

    $sec_data=0; //DB에 입력한 데이터 갯수 초기화 </p>

<p>         $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;

        }

        */</p>

<p>    foreach($xml as $item) {

        $all_data=$all_data+1;</p>

<p>        $chklink_sql="SELECT * FROM `g5_write_".$table."` WHERE `wr_link1`='".$item->link."'"; //이미 불러왔었던 포스팅 인지 확인 -질의문 

        $chk_q=sql_query($chklink_sql);                        //이미 불러왔었던 포스팅 인지 확인 -질의문 쿼리 </p>

<p>        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."'

                )";</p>

<p>                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 ;*/

                 

                };

                

                

        }</p>

<p>

         

    }

    echo  $msg = "총 불러온 포스팅 [".$all_data."] 건 중 DB에 [".$sec_data."] 건 입력 하였습니다.  ";

    echo "
";

    echo " <a href='".G5_BBS_URL."/board.php?bo_table=".$table."'>게시판으로 가기</a>";

}else{</p>

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

}</p>

<p> ?>

 

 

 

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

답변 2개

채택된 답변
+20 포인트
7년 전

</p>

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

<p>

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

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

간단하게 하면

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

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

답변에 대한 댓글 15개

똔삐룸
7년 전
답변 정말정말 감사드립니다!! 얼른 해보고 오겠습니다!
나시
7년 전
그게 아니라면 위에 if 문을 함수 선언문으로 만든다음
settimeinterval 등을 이용해서 일정시간마다 호출되도록 할수도 있을겁니다.
똔삐룸
7년 전
에고 ㅠㅠㅠ 안타깝게 작동을 하지 않고 에러를 나타내네요..
나시
7년 전
에러를 보여주셔야 답해드리죠 ㅋㅋ
나시
7년 전
<meta http-equiv="refresh" content="리프레쉬초;url=호출될주소?rss=get">
이부분을 제일 상단에 넣으신거 맞으신거죠?

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

content 중간에 ";" 콜론 빠졌는지 정확히 초;url=주소 정확히 봐주세요 ^^
똔삐룸
7년 전
친절하게 계속 답변해주셔서 너무 감사드립니다 ㅠ
말씀해주신대로 제일 상단에 해당 문구를 삽입하였는데
이제 에러는 뜨지 않지만 이전처럼
'포스트 가져오기'를 눌러야 rss를 가져오네요..

설명해주신 것 처럼 자동으로 실행되면서 rss를 가져오게 하고싶은데
초보인 입장에서는 정말 막막하기만 하네요 ㅠ
똔삐룸
7년 전
[code]
<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>";
}

?>

[/code]

이렇게 되어있습니다..
나시
7년 전
간단한 거라 간단하게 답을 드렸는데
간단히 해결이 안되니 저도 난감하네요 ^^
아마도 너무나도 당연한것을 간과한듯 싶은데 장님 문고리 잡기 마냥 되버리네요 ㅋㅋ
질문자가 답변자보다 먼저 포기하면 안되요 :D
똔삐룸
7년 전
좀 더 열심히 공부해보고
해결이 그래도 안된다면 다시 sir에 찾아와볼게요 ㅠㅠ
친절하게 답변 남겨주셔서 감사드립니다
나시
7년 전
에러가 안나왔다면 일단 제대로 된거 같네요
3600 초면 한시간인가요?
한시간 있다 테스트는 힘드실테니까 일단 5 해서 5초후에 실행되는지 확인해보시고 되면 3600 으로 바꾸세요 ^^
앗 그러고 보니 호출주소를 저렇게 쓰신건가요?
[code]
<meta http-equiv="refresh" content="5;url=./get_rss.php?rss=get">
[/code]
이렇게 쓰셔야죠
나시
7년 전
추가로 답하자면
meta 태그는 그 코드가 바로 실행되는게 아니라 설정된 시간이 지난뒤에 다시 로딩될때
rss=get 을 붙여 실행하도록 하는겁니다.
그래서 그 페이지를 호출하는 순간에는 rss 를 가져오지 않습니다.

설정된 시간 - 님의 경우에는 한시간 - 이 지난후에 rss 를 가져오는거니 테스트가 제대로 될리 없습니다. ^^
똔삐룸
7년 전
우와! 말씀해주신대로 설정하니 정말 5초마다 자동으로 불러옵니다 ㅠㅠㅠㅠ 감격!!
정말정말 감사드립니다 ㅠㅠㅠㅠ

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

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

아까 get_rss.php를 실행하지 않고 그냥 놔둬봤는데 실행하지 않고서는
rss를 불러오지 않더라구요 ㅠ...
질문이 길어져서 정말 죄송합니다 ㅠ
똔삐룸
7년 전
아! 아래분이 올려주신 방법을 쓰면 되겠네요 ㅎㅎ
해결된 것 같아서 기분이 너무 좋습니다 ㅠㅠㅠ
답변해주신 모든 분들께 진심으로 감사드립니다
나시
7년 전
결론은 m3cron 이네요..^^
혹시 그게 잘 안되면 다시 질문 올려보세요
제가 보게 되면 답 달아드리고 아니면 다른분이 답글 달아주실겁니다.
똔삐룸
7년 전
친절한 응원 감사드립니다 ㅎㅎㅎ
안타깝게도 이윰빌더에서는 m3cron이 동작하지 않네요 ㅎㅎ;;;;;
다른 방법을 더 공부해 봐야 할 것 같지만 나시님께 많이 배웠으니
충분히 성과를 얻었습니다.
다시한번 도움주셔서 정말 감사드립니다!

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

그누위즈

https://sir.kr/g5_plugin/3808" target="_blank">https://sir.kr/g5_plugin/3808

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

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

답변에 대한 댓글 1개

똔삐룸
7년 전
조언 정말 감사드립니다!

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

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

로그인