KLDP BBS의 RSS feed 기능 추가에 대한 도움을 부탁드립니다.

권순선의 이미지

어떤 분이 현재 이곳 KLDP BBS에서 제공되고 있는 RSS feed에 <pubdate></pubdate>를 좀 넣어 달라는 요청을 하셨는데 그 외에도 몇 가지 더 평소에 아쉬웠던 기능들이 있어 공개적으로 요청을 드립니다.

현재 이곳에서 사용하고 있는 rss feed는 phpbb.com의 몇몇 rss feed 모듈 중에서 하나를 가지고 와서 제가 약간 수정한 것인데 아쉬운 점이 좀 있습니다.

추가가 필요한 기능은 다음과 같습니다.

0. <pubdate></pubdate> 태그 추가
글이 올라온 날짜를 보여주도록 합니다.

1. 원하는 게시판의 글만 선택하여 feed를 볼 수 있게 하는 기능
예: http://bbs.kldp.org/rss.php?f=2,3 과 같이 호출하면 프로그래밍 QnA, 설치, 활용 QnA의 최신 글만 가지고 오게 합니다. 두 개 이상의 게시판을 선택하여 가지고 올 수 있게 하며 없는 게시판 번호를 명시하거나 잘못된 문자열을 f= 뒤에 넣을 경우는 에러를 출력합니다.

2. 원하는 카테고리의 글만 선택하여 feed를 볼 수 있게 하는 기능
예: http://bbs.kldp.org/rss.php?c=10 과 같이 호출하면 포럼 카테고리에 해당하는 게시판의 최신 글만 가지고 오게 합니다. 이 경우도 두 개 이상의 카테고리를 선택할 수 있게 하고 없는 카테고리이거나 잘못된 문자열을 c= 뒤에 넣을 경우는 에러를 출력합니다.

3. 출력 인코딩 추가
예: http://bbs.kldp.org/rss.php?encoding=euc-kr 과 같이 호출하면 utf-8로 rss feed를 제공하도록 합니다. 설정하지 않았을 경우 기본 인코딩은 utf-8로 합니다. (KLDP BBS와 같이 euc-kr을 사용하는 경우에도 rss feed의 기본 인코딩은 utf-8로 하도록 하는 것이 좋을 것 같습니다.)

이러한 기능들이 추가될 수 있다면 rss reader로 이곳 kldp bbs를 사용하시는 분들은 물론, 현재 phpbb를 사용하고 있는 다른 사이트들에서도 rss feed를 좀더 편리하게 적용하실 수 있게 됩니다.

관심있는 분들의 많은 수고 부탁드립니다....

참고로, 첨부의 rss.tgz를 phpbb에 적용하시려면 압축을 풀었을 때 두 개의 파일이 나오는데 rss.php는 phpbb의 최상위 디렉토리에 놓으면 되고, rdf2_body.tpl 파일은 .../phpbb/templates/subSilver 디렉토리 아래에 넣으면 됩니다.

File attachments: 
첨부파일 크기
파일 rss.tgz2.47 KB
파일 rss_modi.tgz2.67 KB
Package icon rss.zip2.9 KB
파일 bbsrss.tgz3.36 KB
파일 rss.tgz3.38 KB
Plain text icon rss.php.txt8.22 KB
자룡의 이미지

0번과 3번만 추가한겁니다.

- 0 번 수정

+ rdf2_body.tpl 수정
마지막 부분에 <pubdate> 태그를 위한 라인 추가

<!-- BEGIN topic_item -->
<item>
    <title>{topic_item.TOPIC_TITLE}</title>
    <link>{topic_item.U_TOPIC}</link>
    <description>{topic_item.POST_TEXT}</description>
    <pubdate>{topic_item.POST_TIME}</pubdate>
</item>

+ rss.php 수정

쿼리에서 작성시간 가지고 오도록 컬럼 추가 (p.post_time 추가)

$sql = "SELECT t.topic_id, t.topic_title, t.topic_last_post_id , pt.post_text , pt.bbcode_uid, p.post_time
    FROM " . TOPICS_TABLE . " AS t, " . POSTS_TABLE . " AS p, " . FORUMS_TABLE . " AS f, " . POSTS_TEXT_TABLE . " AS pt
    WHERE
   ...

가지고 온 post time 을 변환

$post_text = preg_replace("/$smilies_path/", $smilies_url, $post_text);
$post_text = make_clickable($post_text);

// 가지고 온 post time 을 변환
$post_time = create_date($board_config['default_dateformat'], $topic['post_time'], $board_config['board_timezone']);

탬플릿에 적용되도록 어레이에 등록 .. 마지막 항목에 'POST_TIME'=>$post_time 만 추가

$template->assign_block_vars('topic_item', array(
            'U_TOPIC' => $viewtopic_url . '?' . POST_POST_URL . '=' . $topic['topic_last_post_id'] . '#' . $topic['topic_last_post_id'],
            'POST_TEXT' => htmlspecialchars($post_text),
            'TOPIC_TITLE' => htmlspecialchars(preg_replace("/(([\x80-\xFE].)*)[\x80-\xFE]?$/","\\1",$topic['topic_title'])),
            'POST_TIME' => $post_time)
        );

- 3 번추가

rdf 파일의 헤더부분의 인코딩 선언만 바꾸는거 맞나요? 내용까지 바꾸는건 저에겐 무리 -_-;;
그리고 rss.php 가 생성하는 기본 인코딩은 phpBB 의 설정값을 가지고 오는듯 합니다.
그래서 encoding 지정시에는 지정한 인코딩으로 세팅하고
지정하지 않을시에는 phpBB 의 설정값을 사용하도록 했습니다;;;

53 라인 정도에 추가...

// Check for forum_id in query
$forum_id = ( isset($HTTP_GET_VARS['f']) ) ? intval($HTTP_GET_VARS['f']) : '';
$sql_where = ( !empty($forum_id) ) ? ' AND f.forum_id = ' . $forum_id : ' ';

// 인코딩 설정 추가
$set_encoding = ( isset($HTTP_GET_VARS['encoding']) ) ? $HTTP_GET_VARS['encoding'] : $lang['ENCODING'];

$template->assign_vars... 부분에서 인코딩 부분 수정
($lang['ENCODING'] 을 $set_encoding 으로 변경..)

$template->assign_vars(array(
    'S_CONTENT_ENCODING' => $set_encoding,
    'U_FORUM' => $index_url,
    'FORUM_TITLE' => $site_name,
    'FORUM_DESCRIPTION' => $site_description)
);

오늘 있는 세미나가 취소될듯 하여 (사실은 공부하기 귀찮아서) 해봤습니다.
다른 분들이 작업중이실것 같은데, 참고로 봐주시면 고맙겠습니다.

댓글 첨부 파일: 
첨부파일 크기
파일 0바이트

-----
이글을 읽는 모든 이에게 평화가 함께 하기를... ^^;

kururu의 이미지

권순선 wrote:

1. 원하는 게시판의 글만 선택하여 feed를 볼 수 있게 하는 기능
예: http://bbs.kldp.org/rss.php?f=2,3 과 같이 호출하면 프로그래밍 QnA, 설치, 활용 QnA의 최신 글만 가지고 오게 합니다. 두 개 이상의 게시판을 선택하여 가지고 올 수 있게 하며 없는 게시판 번호를 명시하거나 잘못된 문자열을 f= 뒤에 넣을 경우는 에러를 출력합니다.

이미 f=1 로 특정 게시판만 모니터링하는 기능은 구현되어 있었습니다. 여기에 2개 이상의 게시판을 모니터링 할 수 있도록 했습니다.
사용법은 f= 에 게시판 번호를 ,로 나눠 입력하며 잘못된 게시판 번호를 입력하면 무시합니다. 유효성 검사가 필요하면 87~100 라인의 주석을 해제합니다.

권순선 wrote:

2. 원하는 카테고리의 글만 선택하여 feed를 볼 수 있게 하는 기능
예: http://bbs.kldp.org/rss.php?c=10 과 같이 호출하면 포럼 카테고리에 해당하는 게시판의 최신 글만 가지고 오게 합니다. 이 경우도 두 개 이상의 카테고리를 선택할 수 있게 하고 없는 카테고리이거나 잘못된 문자열을 c= 뒤에 넣을 경우는 에러를 출력합니다.

c= 는 rss에 몇개의 내용을 출력할지로 예약되어 있었습니다.
그래서 ct= 로 대신했으며 사용법은 f=와 동일합니다.
ct= 와 f= 를 함께 사용할 수 있으며 or 검색을 합니다.
구현방법상 버그가 있을수도 있는데 혹 문제되면 알려주십시요.

0번과 3번은 해당 지식이 없어 생략합니다.
윗분이 작업하신걸 못보고 시작한 관계로.. merge는 순선님께 맡기겠습니다.

패치에 대한 라이센스는 public domain 으로 합니다. 패치한 부분에 있어 저는 어떠한 권리도 주장하지 않겠습니다. :)

댓글 첨부 파일: 
첨부파일 크기
Package icon 0바이트
권순선의 이미지

휴... 드디어 두분의 작업 결과를 합쳐서 적용하여 두었습니다. 잘 작동하는지 한번 테스트 부탁드립니다.

합친 결과는 아래 첨부 파일에 있습니다. 혹 문제가 있으면 아래 첨부 파일을 기준으로 수정하여 알려 주시면 감사드리겠습니다. cvs나 svn에 넣으면 좋을텐데 파일이 두개 뿐이라.... :-)

댓글 첨부 파일: 
첨부파일 크기
파일 0바이트
세이군의 이미지

개별적으로 테스트를 해 보았는데 몇가지 문제점이 좀 발생하는군요..
1. 인코딩 정보를 뒤에 붙여두면 서버에서 보내는 인코딩과 파일자체에 있는 인코딩이 맞지 않아서 깨져 보이는 경우가 발생합니다. 이 문제는 rss.php 하단부에서

Header("Content-Type: text/xml");

부분을
header ('Content-Type: text/xml; charset='.$set_encoding);

로 바꾸면 해결할 수 있습니다.

2. pubdate를 넣기는 했지만 RDF 0.9(netscape)에는 해당태그가 미정의 태그네요..

feedvalidator.org(각종 feed-rdf,rss,atom-가 표준에 맞게 작성되었는지 확인해주는 사이트입니다.)의 결과로는 이런 오류가 있다고 합니다.

사정이 있어서 그 동안 이 스레드를 보기만 했는데 이젠 건드릴 수 있는 때가 되었네요.. RSS2.02에 맞춰서 수정해보겠습니다.
현재 수정하고 있는 내용은 http://drssay.com/forum/rss.php에서 볼 수 있습니다.

세이군의 이미지

작업완료했습니다.

RSS2.02피드를 이용한 RSS페이지입니다.
대부분의 피드에서 RSS 2.02피드를 지원하므로 이 파일을 이용하면 정상적으로 수집이 가능할 것입니다.

변경사항
1. 앞서 올려주신 분들의 내용은 모두 포함했습니다.
2. RSS출력시에 날자는 모두 GMT로 표시하도록 하였습니다.(사실은 사용자설정에 있는 시간대를 따라가야하는데 시간대 설정을 모바꾸겠어서 그냥 GMT로 가도록 했습니다.)
3. 인코딩 선택시 잘못 출력되는 부분을 바로잡았습니다.
4. Content-Type 헤더에 선택한 인코딩이 표시되도록 하였습니다.

이상한 점 있으면 알려주세요..

댓글 첨부 파일: 
첨부파일 크기
파일 0바이트
권순선의 이미지

drssay님의 신규 feed를 방금 적용하였습니다. drssay님 감사합니다.... :-)

세이군의 이미지

야심한 밤에 다시 확인해 봤습니다.
그랬더니 2가지 문제점이 나왔습니다.

1. UTF-8로 출력시에 사이트 설명이 제대로 변환이 안된다
2. 역시 UTF-8로 출력시 본문에 대한 인코딩이 바뀌지 않는다.

한번더 수정을 보고 다시 올리겠습니다.

세이군의 이미지

에휴~~ 어렵네요..
수정했습니다.

변경한 PHP파일 올립니다.

댓글 첨부 파일: 
첨부파일 크기
Plain text icon 0바이트
권순선의 이미지

drssay wrote:
에휴~~ 어렵네요..
수정했습니다.

변경한 PHP파일 올립니다.


감사합니다... drssay님께서 올려주신 파일을 적용하였습니다. 테스트 부탁드립니다...