rss 파싱기 실시간으로 변경하는 방법에 대해 조언을 구합니다 채택완료
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개
</p>
<p><a href='?rss=get'>포스팅 가져오기</a>";</p>
<p>
이부분을 보시면 페이지를 호출할때
http://호출되는페이지주소?rss=get 이라고 호출하면 됩니다.
간단하게 하면
이런식으로 하고 호출된 주소에 자기자신의 주소를 넣으면 계속 일정시간마다 가져올겁니다.
답변에 대한 댓글 15개
settimeinterval 등을 이용해서 일정시간마다 호출되도록 할수도 있을겁니다.
이부분을 제일 상단에 넣으신거 맞으신거죠?
에러 내용만 봐서는 "," 또는 ";" 를 빼먹었다는 뜻인데
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>";
}
?>
[/code]
이렇게 되어있습니다..
간단히 해결이 안되니 저도 난감하네요 ^^
아마도 너무나도 당연한것을 간과한듯 싶은데 장님 문고리 잡기 마냥 되버리네요 ㅋㅋ
질문자가 답변자보다 먼저 포기하면 안되요 :D
해결이 그래도 안된다면 다시 sir에 찾아와볼게요 ㅠㅠ
친절하게 답변 남겨주셔서 감사드립니다
3600 초면 한시간인가요?
한시간 있다 테스트는 힘드실테니까 일단 5 해서 5초후에 실행되는지 확인해보시고 되면 3600 으로 바꾸세요 ^^
앗 그러고 보니 호출주소를 저렇게 쓰신건가요?
[code]
<meta http-equiv="refresh" content="5;url=./get_rss.php?rss=get">
[/code]
이렇게 쓰셔야죠
meta 태그는 그 코드가 바로 실행되는게 아니라 설정된 시간이 지난뒤에 다시 로딩될때
rss=get 을 붙여 실행하도록 하는겁니다.
그래서 그 페이지를 호출하는 순간에는 rss 를 가져오지 않습니다.
설정된 시간 - 님의 경우에는 한시간 - 이 지난후에 rss 를 가져오는거니 테스트가 제대로 될리 없습니다. ^^
정말정말 감사드립니다 ㅠㅠㅠㅠ
저 혹시 정말 죄송하지만 마지막으로 하나만 더 여쭈어봐도 괜찮을까요?
현재 get_rss.php를 실행시켜서 포스트 가져오기를 누르지 않고도
5초뒤에 자동으로 받아오게 되었는데요,
혹시 get_rss.php를 실행하지 않고도 (예를들면 브라우져에서 ~~/get_rss.php를 입력하여 실행하지 않고도) 자동으로 백그라운드에서 글을 받아오게 할 수는 없을까요?
아까 get_rss.php를 실행하지 않고 그냥 놔둬봤는데 실행하지 않고서는
rss를 불러오지 않더라구요 ㅠ...
질문이 길어져서 정말 죄송합니다 ㅠ
해결된 것 같아서 기분이 너무 좋습니다 ㅠㅠㅠ
답변해주신 모든 분들께 진심으로 감사드립니다
혹시 그게 잘 안되면 다시 질문 올려보세요
제가 보게 되면 답 달아드리고 아니면 다른분이 답글 달아주실겁니다.
안타깝게도 이윰빌더에서는 m3cron이 동작하지 않네요 ㅎㅎ;;;;;
다른 방법을 더 공부해 봐야 할 것 같지만 나시님께 많이 배웠으니
충분히 성과를 얻었습니다.
다시한번 도움주셔서 정말 감사드립니다!
댓글을 작성하려면 로그인이 필요합니다.
https://sir.kr/g5_plugin/3808" target="_blank">https://sir.kr/g5_plugin/3808
이런거 만들어서 몇시간 간격으로 해당파일이 실행되어서 rss를 가져오도록 하세요
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인