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로 가져가는건 가져가도 된다고 허락을 해주셔서 저작권 문제는 없습니다 ㅠ
소르는 아래와 같습니다!
번거로우시겠지만 지식을 주시길 간곡히 부탁드립니다 ㅠㅠㅠ
Copy
<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개 / 댓글 16개
채택된 답변
+20 포인트
2018-02-22 (목) 13:28:28
Copy
<a href='?rss=get'>포스팅 가져오기</a>";
이부분을 보시면 페이지를 호출할때
http://호출되는페이지주소?rss=get 이라고 호출하면 됩니다.
간단하게 하면
<meta http-equiv="refresh" content="리프레쉬초;url=호출될주소?rss=get">
이런식으로 하고 호출된 주소에 자기자신의 주소를 넣으면 계속 일정시간마다 가져올겁니다.
답변에 대한 댓글 15개
2018-02-22 (목) 13:32:11
그게 아니라면 위에 if 문을 함수 선언문으로 만든다음
settimeinterval 등을 이용해서 일정시간마다 호출되도록 할수도 있을겁니다.
settimeinterval 등을 이용해서 일정시간마다 호출되도록 할수도 있을겁니다.
2018-02-22 (목) 14:17:39
<meta http-equiv="refresh" content="리프레쉬초;url=호출될주소?rss=get">
이부분을 제일 상단에 넣으신거 맞으신거죠?
에러 내용만 봐서는 "," 또는 ";" 를 빼먹었다는 뜻인데
content 중간에 ";" 콜론 빠졌는지 정확히 초;url=주소 정확히 봐주세요 ^^
이부분을 제일 상단에 넣으신거 맞으신거죠?
에러 내용만 봐서는 "," 또는 ";" 를 빼먹었다는 뜻인데
content 중간에 ";" 콜론 빠졌는지 정확히 초;url=주소 정확히 봐주세요 ^^
2018-02-22 (목) 14:31:35
친절하게 계속 답변해주셔서 너무 감사드립니다 ㅠ
말씀해주신대로 제일 상단에 해당 문구를 삽입하였는데
이제 에러는 뜨지 않지만 이전처럼
'포스트 가져오기'를 눌러야 rss를 가져오네요..
설명해주신 것 처럼 자동으로 실행되면서 rss를 가져오게 하고싶은데
초보인 입장에서는 정말 막막하기만 하네요 ㅠ
말씀해주신대로 제일 상단에 해당 문구를 삽입하였는데
이제 에러는 뜨지 않지만 이전처럼
'포스트 가져오기'를 눌러야 rss를 가져오네요..
설명해주신 것 처럼 자동으로 실행되면서 rss를 가져오게 하고싶은데
초보인 입장에서는 정말 막막하기만 하네요 ㅠ
2018-02-22 (목) 14:33:35
[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]
이렇게 되어있습니다..
<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]
이렇게 되어있습니다..
2018-02-22 (목) 14:36:05
간단한 거라 간단하게 답을 드렸는데
간단히 해결이 안되니 저도 난감하네요 ^^
아마도 너무나도 당연한것을 간과한듯 싶은데 장님 문고리 잡기 마냥 되버리네요 ㅋㅋ
질문자가 답변자보다 먼저 포기하면 안되요 :D
간단히 해결이 안되니 저도 난감하네요 ^^
아마도 너무나도 당연한것을 간과한듯 싶은데 장님 문고리 잡기 마냥 되버리네요 ㅋㅋ
질문자가 답변자보다 먼저 포기하면 안되요 :D
2018-02-22 (목) 14:37:47
좀 더 열심히 공부해보고
해결이 그래도 안된다면 다시 sir에 찾아와볼게요 ㅠㅠ
친절하게 답변 남겨주셔서 감사드립니다
해결이 그래도 안된다면 다시 sir에 찾아와볼게요 ㅠㅠ
친절하게 답변 남겨주셔서 감사드립니다
2018-02-22 (목) 14:39:09
에러가 안나왔다면 일단 제대로 된거 같네요
3600 초면 한시간인가요?
한시간 있다 테스트는 힘드실테니까 일단 5 해서 5초후에 실행되는지 확인해보시고 되면 3600 으로 바꾸세요 ^^
앗 그러고 보니 호출주소를 저렇게 쓰신건가요?
[code]
<meta http-equiv="refresh" content="5;url=./get_rss.php?rss=get">
[/code]
이렇게 쓰셔야죠
3600 초면 한시간인가요?
한시간 있다 테스트는 힘드실테니까 일단 5 해서 5초후에 실행되는지 확인해보시고 되면 3600 으로 바꾸세요 ^^
앗 그러고 보니 호출주소를 저렇게 쓰신건가요?
[code]
<meta http-equiv="refresh" content="5;url=./get_rss.php?rss=get">
[/code]
이렇게 쓰셔야죠
2018-02-22 (목) 14:47:12
추가로 답하자면
meta 태그는 그 코드가 바로 실행되는게 아니라 설정된 시간이 지난뒤에 다시 로딩될때
rss=get 을 붙여 실행하도록 하는겁니다.
그래서 그 페이지를 호출하는 순간에는 rss 를 가져오지 않습니다.
설정된 시간 - 님의 경우에는 한시간 - 이 지난후에 rss 를 가져오는거니 테스트가 제대로 될리 없습니다. ^^
meta 태그는 그 코드가 바로 실행되는게 아니라 설정된 시간이 지난뒤에 다시 로딩될때
rss=get 을 붙여 실행하도록 하는겁니다.
그래서 그 페이지를 호출하는 순간에는 rss 를 가져오지 않습니다.
설정된 시간 - 님의 경우에는 한시간 - 이 지난후에 rss 를 가져오는거니 테스트가 제대로 될리 없습니다. ^^
2018-02-22 (목) 15:15:05
우와! 말씀해주신대로 설정하니 정말 5초마다 자동으로 불러옵니다 ㅠㅠㅠㅠ 감격!!
정말정말 감사드립니다 ㅠㅠㅠㅠ
저 혹시 정말 죄송하지만 마지막으로 하나만 더 여쭈어봐도 괜찮을까요?
현재 get_rss.php를 실행시켜서 포스트 가져오기를 누르지 않고도
5초뒤에 자동으로 받아오게 되었는데요,
혹시 get_rss.php를 실행하지 않고도 (예를들면 브라우져에서 ~~/get_rss.php를 입력하여 실행하지 않고도) 자동으로 백그라운드에서 글을 받아오게 할 수는 없을까요?
아까 get_rss.php를 실행하지 않고 그냥 놔둬봤는데 실행하지 않고서는
rss를 불러오지 않더라구요 ㅠ...
질문이 길어져서 정말 죄송합니다 ㅠ
정말정말 감사드립니다 ㅠㅠㅠㅠ
저 혹시 정말 죄송하지만 마지막으로 하나만 더 여쭈어봐도 괜찮을까요?
현재 get_rss.php를 실행시켜서 포스트 가져오기를 누르지 않고도
5초뒤에 자동으로 받아오게 되었는데요,
혹시 get_rss.php를 실행하지 않고도 (예를들면 브라우져에서 ~~/get_rss.php를 입력하여 실행하지 않고도) 자동으로 백그라운드에서 글을 받아오게 할 수는 없을까요?
아까 get_rss.php를 실행하지 않고 그냥 놔둬봤는데 실행하지 않고서는
rss를 불러오지 않더라구요 ㅠ...
질문이 길어져서 정말 죄송합니다 ㅠ
2018-02-22 (목) 15:21:24
아! 아래분이 올려주신 방법을 쓰면 되겠네요 ㅎㅎ
해결된 것 같아서 기분이 너무 좋습니다 ㅠㅠㅠ
답변해주신 모든 분들께 진심으로 감사드립니다
해결된 것 같아서 기분이 너무 좋습니다 ㅠㅠㅠ
답변해주신 모든 분들께 진심으로 감사드립니다
2018-02-22 (목) 15:27:53
결론은 m3cron 이네요..^^
혹시 그게 잘 안되면 다시 질문 올려보세요
제가 보게 되면 답 달아드리고 아니면 다른분이 답글 달아주실겁니다.
혹시 그게 잘 안되면 다시 질문 올려보세요
제가 보게 되면 답 달아드리고 아니면 다른분이 답글 달아주실겁니다.
2018-02-22 (목) 15:38:29
친절한 응원 감사드립니다 ㅎㅎㅎ
안타깝게도 이윰빌더에서는 m3cron이 동작하지 않네요 ㅎㅎ;;;;;
다른 방법을 더 공부해 봐야 할 것 같지만 나시님께 많이 배웠으니
충분히 성과를 얻었습니다.
다시한번 도움주셔서 정말 감사드립니다!
안타깝게도 이윰빌더에서는 m3cron이 동작하지 않네요 ㅎㅎ;;;;;
다른 방법을 더 공부해 봐야 할 것 같지만 나시님께 많이 배웠으니
충분히 성과를 얻었습니다.
다시한번 도움주셔서 정말 감사드립니다!
2018-02-22 (목) 13:47:53
이런거 만들어서 몇시간 간격으로 해당파일이 실행되어서 rss를 가져오도록 하세요
답변에 대한 댓글 1개
답변을 작성하려면 로그인이 필요합니다.