허접하게 만들었지만 소스를 공개하겠습니다.
각 캐스트 게시판에 있는 발행 정보([No1.어쩌고저쩌고…]발행했습니다.)만 읽어와서 RSS로 만들어 줍니다. 캐스트노트의 일부도 함께 가져옵니다.
RSS본문에 추가적으로 내용을 덧붙이시려면,
<description><?=$newnote[$i][1]?></description>
<description>태그 사이에 필요한 내용을 채워 넣으면 됩니다. 태그 입력시 < 는 < , > 는 > 로 넣으시면 됩니다.
만약 아래 파일을 opencast.php 라고 저장했다면 opencast.php?id=KK244 형태로 호출해야 합니다.
50여개 캐스트 정도를 테스트했는데, 특별한 경우를 제외하고는 대부분 잘 작동합니다.
(소스가 많이 허접하죠? ㅋㅋ 몇 년만에 PHP해보니 힘드네요… ^^)
<?php
// -------- 정보 추출기 -----------
// 게시판 파일을 불러옴
$opencast_id = $_GET['id'];
$opencast_url = "http://opencast.naver.com/" . $opencast_id;
$fp = fopen($opencast_url,"r");
$content = "";
while( !feof($fp) ){
$buffer = fgets($fp,4096);
$content .= $buffer;
}
fclose($fp);
// 캐스트 제목, 캐스터, 메시지 추출
preg_match("/<a href=\"\/.....\">(.*)<\/a><\/h1>/", $content, $title);
preg_match("/<div class=\"cast_message\">(.*)/", $content, $message);
preg_match("/<a href=\"\/(.*)\" class=\"caster_id\"/", $content, $caster);
$message[1] = str_replace("</div>", "", $message[1]);
// 게시판 파일을 불러옴
$bbs_url = "http://bbs.opencast.naver.com/nboard2/list.nhn?n2_boardId=1000003444&n2_templateObjectId=" . $opencast_id . "&n2_volume=0";
$fp = fopen($bbs_url,"r");
$content = "";
while( !feof($fp) ){
$buffer = fgets($fp,4096);
$content .= $buffer;
}
fclose($fp);
// 글 목록과 날짜 추출
preg_match_all("/\".*\"[,\n]/", $content, $list);
preg_match_all("/<em class=\"date\">(.*)<\/em>/", $content, $date);
// 가장 하단의 제목 추출
preg_match_all("/\"\[No.*\"/", $content, $first);
preg_match("/\[No(.*)\]/", $first[0][sizeof($first[0])-1], $first_subject);
// 날짜 배열크기 구함
$size = sizeof($date[0]);
// 날짜 순서에 맞게 재배치
for ($i=0; $i<$size; $i++) {
$newdate[$i] = $date[1][$i];
preg_match("/\[No(.*)\]/", $list[0][$i+$size+1], $newsubject[$i]);
preg_match("/\"(.*)\"/", $list[0][$i+1], $newnote[$i]);
}
// 가장 하단 제목 적용
$newsubject[$i-1] = $first_subject;
// -------- RSS 생성기 -----------
// 캐스트 제목 $title[1]
// 캐스트 설명 $message[1]
// 발행일 $newdate[..]
// 글 제목 $newsubject[..][1]
// 글 내용 $newnote[..][1]
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
?>
<rss version="2.0">
<channel>
<title><?=$title[1]?></title>
<link><?=$opencast_url?></link>
<description><?=$message[1]?></description>
<language>ko</language>
<pubDate><?php echo date("D, d M Y H:i:s O", time()); ?></pubDate>
<generator>Webtools Beta1(http://webtools.kr/)</generator>
<?php
$cast_index = 30000;
for ($i = 0; $i <= sizeof($newsubject); $i++) {
// 제목이 유효한 발행일 경우만
if($newsubject[$i][1]) {
// 발행일 계산
$date_temp = explode(".", $newdate[$i]);
$date_stamp = mktime(0, 0, 0, $date_temp[1], $date_temp[2], $date_temp[0]+2000);
//발행번호 추출
$no_temp = explode(" ", $newsubject[$i][1]);
$cast_no = explode(".", $no_temp[0]);
if($cast_index > $cast_no[1]) { // 캐스트 번호가 순차적으로 감소하는지 검사
$cast_index = $cast_no[1]; // 캐스트 번호가 순차적으로 감소하는지 검사하기 위한 변수
//본문내용 태그 문자 변환, 아래와 순서 조심
$newnote[$i][1] = str_replace(array('&', '<', '>', '"', "'"), array('&', '<', '>', '"', '''), $newnote[$i][1]);
//본문내용 \n문자를 <br />로 변환
$newnote[$i][1] = str_replace('\\n', '<br />', $newnote[$i][1]);
//제목의 따옴표 변환
$newsubject[$i][1] = str_replace(array("\\'", '\\"'), array("'", '"'), $newsubject[$i][1]);
?>
<item>
<title>No<?=$newsubject[$i][1]?></title>
<link><?php echo $opencast_url . "/" . $cast_no[1]; ?></link>
<description><?=$newnote[$i][1]?></description>
<author><?=$caster[1]?></author>
<guid><?php echo $opencast_url . "/" . $cast_no[1]; ?></guid>
<pubDate><?php echo date("D, d M Y H:i:s O", $date_stamp); ?></pubDate>
</item>
<?php
}
}
}
?>
</channel>
</rss>
'IT > 웹툴즈' 카테고리의 다른 글
XE용 Sitemap XML 생성 모듈 (0) | 2009.04.28 |
---|---|
XE용 문장번역 에디터 컴포넌트 (0) | 2009.04.27 |
오픈캐스트 위젯(?) PHP소스 공개 (4) | 2009.04.21 |
블로그 사용자를 위한 오픈캐스트 이웃 맺기와 랜덤 보여주기 (0) | 2009.04.19 |
이웃 블로그 간에 적극적으로 상부상조하는 방법 - 웹툴즈 (0) | 2009.04.19 |