그누보드와 네이버 신디케이션 연결 및 확인 방법, 설치 방법
페이지 정보
작성일14.03.04 22:59관련링크
본문
그누보드4 사용시 네이버 신디케이션 연동하는 방법입니다.
초보자가 직접 작업하기에는 복잡하고 어려운 감이 없잖아 있는 거 같네요.
더군다나 그누보드에 신디케이션 설치하는 방법에 대한 자료도 그다지 많은 거 같지 않고...
설령 있다고 하더라도 역시 초보가 보고 따라하기에는 난해한 외계어처럼 보이기만 하죠. ㅜㅜ
그래도 저는 꿋꿋하게 인터넷 검색을 하면서 관련 정보를 뒤지고 뒤져 설치를 마쳤습니다. 흑흑.. ㅜㅜ
제대로 된 것인지 아직은 잘 모르겠지만 일단 제가 작업한 내용을 정리해 보도록 하겠습니다.
1. 먼저 신디케이션 관련 설치 파일을 준비하셔야 합니다.
네이버에서 배포한 파일은 기본적으로 문자셋 포맷 형태가 euc-kr이라 utf-8 사용자는 직접 변환시켜주거나 아니면 변환 작업을 해놓은 파일을 구하시면 될 겁니다.
저는 어떻게 변환시켜주는지 몰라서 그냥 다른 사람이 변환시켜 재배포한 파일을 구해서 작업했습니다.
제가 구한 파일을 압축해제하니...
1개의 디렉토리 ( gnuboard4 )와 2개의 파일 ( INSTALL.txt, VERSION )이 있더군요.
gnuboard4 디렉토리 안에는 3개의 디렉토리 ( adm, bbs, syndi )만 있습니다.
adm 디렉토리 안에는 3개의 파일이 있고, bbs 디렉토리 안에는 4개의 파일이 있습니다.
2. 파일을 자신이 그누보드를 설치한 경로에 업로드 합니다.
여기서 주의하실 점은 [adm]과 [bbs] 디렉토리에 있는 파일은 그누보드가 설치된 디렉토리에 바로 업로드 시키지 말고, 서버에 있는 파일과 차이나는 부분만 수정해 주세요.
아무 생각없이 그냥 덮어씌우면 경우에 따라서는 난감한 상황에 처하는 분들도 생길지 몰라요. ㅋㅋ
[syndi] 디렉토리는 통째로 업로드 시켜주세요.
3. Database Table 생성합니다.
그누보드/syndi/schema/mysql.gnuboard4_euckr.sql 파일을 이용하여 테이블 생성을 합니다.
저는 이 단계에서 어떻게 해야할지 몰라 당황했었네요.
그냥 웹브라우저 창에서 해당 경로 주소 넣고 엔터치면 되는줄 알았는데.. 헐..
그렇게 하니 안되더라구요. ^^;
그래서, 혹시나 싶어서 'phpMyAdmin'으로 접속해서 보니 'import' 메뉴가 보이길래 여기서 mysql.gnuboard4_euckr.sql 파일을 지정해주고 '실행'시켰더니 테이블 목록에 'g4_syndi_delete_content_log' 항목이 생겼더라구요.
참고로 DB 테이블에 'g4_syndi_delete_content_log' 항목이 생성되지 않으면 신디케이션 작동시 오류가 발생한다고 하네요.
4. Syndication Config 파일 수정합니다.
그누보드/syndi/config/site.config.php 파일을 편집기로 열어서 자기 사이트에 맞게 수정합니다.
<?PHP
// 타임존
$GLOBALS['syndi_time_zone'] = '+09:00';
// 데이타 인코딩
$GLOBALS['syndi_from_encoding'] = 'utf-8';
// 도메인 (http:// 제외, 마지막 / 제외)
$GLOBALS['syndi_tag_domain'] = 'goopia.com';
// 도메인 연결 날짜(년도)
$GLOBALS['syndi_tag_year'] = '2013';
// 홈페이지 제목
$GLOBALS['syndi_homepage_title'] = '구피아';
// Syndication 출력 url (syndi_echo.php의 웹경로)
$GLOBALS['syndi_echo_url'] = 'http://' . $GLOBALS['syndi_tag_domain'] . '/syndi/syndi_echo.php';
?>
저는 위에 나열한 것처럼 수정해 주었습니다.
입력이 올바르지 않는 경우 동작이 불가능하거나 Syndication Error가 생길 수 있다고 하니 주의하세요.
5. 그외 수정할 부분들....
어떤 분이 네이버에서 제공한 신디케이션 설치 파일에 버그가 좀 있다고 해서 관련 부분을 보완하는 코드를 추가합니다.
검증 유무는 모르겠으니 수정할지 말지는 각자 알아서 판단하시길... ^^;
1. 경로 : 그누보드/syndi/include/gnuboard4_euckr/include.bbs.delete.php
위에서 표시된 경로의 파일( include.bbs.delete.php )을 편집기로 열어보면 '$subject_row['wr_subject']' 항목이 보이실 겁니다.
$sql = "select wr_subject from $write_table where wr_id='" .$row['wr_id'] ."'";
$subject_row = sql_fetch($sql);
$_link = './bbs/board.php?bo_table=%s&wr_id=%s';
$_sql = "insert into g4_syndi_delete_content_log(content_id, bbs_id, title, link_alternative, delete_date) values('%s','%s','%s','%s','%s')";
sql_query(sprintf($_sql, $row['wr_id'], $bo_table, $subject_row['wr_subject'], sprintf($_link, $bo_table, $row['wr_id']), date('YmdHis')));
버그는 $subject_row['wr_subject']에 ' 가 포함된 문자열인 경우 escaping이 되지 않아 오류가 발생한다는 건네요.
해결법은 이 항목을 [ mysql_real_escape_string($subject_row['wr_subject']) ]으로 대체해 줍니다.
그럼 아래처럼 될 거에요.
sql_query(sprintf($_sql, $row['wr_id'], $bo_table, mysql_real_escape_string($subject_row['wr_subject']), sprintf($_link, $bo_table, $row['wr_id']), date('YmdHis')));
2. 경로 : 그누보드/syndi/func/site.func.php
위 경로에 표시된 site.func.php 파일을 편집기로 열어보면 348라인에 'function _Syndi_getArticleNextPage($args)' 함수가 보이실 겁니다.
function _Syndi_getArticleNextPage($args)
{
global $g4;
$sql = "select count(*) as cnt from " . $g4['board_table'] . " b, ". $g4['group_table'] . " g where b.bo_table='" . mysql_real_escape_string($args->target_channel_id). "' and b.bo_read_level=1 and b.bo_list_level=1 and g.gr_use_access=0 and g.gr_id = b.gr_id";
$row = sql_fetch_array(sql_query($sql)); <== 추가
if($row['cnt']==0) return false;
// get article list
버그는 '$sql'을 만들고 값을 받아오지 않은 변수 '$row'의 'cnt'를 체크해서 검사할 때 'cnt'는 항상 'null'이 됨으로 이로 인해 다음 페이지가 있어도 받아오지 못하는 값이 된다고 합니다.
해결법은 위에 표시한 것처럼 '$row = sql_fetch_array(sql_query($sql));' 항목을 추가해 줍니다.
3. 경로 : 그누보드/syndi/func/site.func.php
위 경로에 표시된 site.func.php 파일을 편집기로 열어보면 171라인에 'function _Syndi_getArticleList($args)'라는 함수와 348라인에 'function _Syndi_getArticleNextPage($args)'라는 함수에서 시간 자료형을 비교하는 부분이 있습니다.
if($args->start_time) $where .= ' and wr_datetime >= '. _getTime($args->start_time);
if($args->end_time) $where .= ' and wr_datetime <= '. _getTime($args->end_time);
버그는 '_getTime'의 결과는 'unixtime' 값이고 'wr_datetime'은 'datetime'형이라서 비교 연산이 항상 'false'가 나온다는 하네요.
해결법은 아래와 같이 변경해 줍니다.
if($args->start_time) $where .= ' and wr_datetime >= '. date("Y-m-d H:i:s", _getTime($args->start_time));
if($args->end_time) $where .= ' and wr_datetime <= '. date("Y-m-d H:i:s", _getTime($args->end_time));
후~.. 길다. 헥헥.. ㅜㅜ
이상으로 제가 그누보드에서 네이버 신디케이션 연결했던 과정을 정리해 보았습니다.
제대로 되는지 확인되려면 시간이 좀 필요한가 봅니다.
예전에 제가 사이트 개설할 때 이것 저것 설치해 보다가 그 중에 신디케이션 관련한 것도 손을 댔는지 이번에 신디케이션 연결하려고 보니 제 사이트 상태가 벌써 standby 상태로 나와 있더라구요.
그리고, 이번에 설치를 끝낸지 현재 4시간 가량 흘렀는데 아직도 사이트 상태는 처음과 같이 그대로 나오네요.
6. 신디케이션 적용 유무 확인
http://syndication.openapi.naver.com/status/?site=사이트주소
사이트 주소에는 자신의 도메인 주소를 넣으면 되는데요.
제 경우는 goopia.com 요렇게 넣습니다. ^^
그외 더 더 많은 사용법에 대해서는 [ Syndication API 명세 ] 페이지를 통해 확인해 보세요.
7. 기타...
제 개인적인 생각인데요.
'그누보드/syndi/func/site.func.php' 이 경로의 파일에서 편집기로 열어보면 17라인이 좀 이상한 것 같더군요.
// include gnuboard config & lib
include '../config.php';
include '../lib/common.lib.php';
include '../dbconfig.php';
site.func.php 파일이 있는 디렉토리에서 '한 단계 상위 디렉토리( ../ )'라면 '그누보드/syndi' 디렉토리가 될텐데...
근데 여기에는 config.php, lib/common.lib.php, dbconfig.php 파일이 존재하지 않거든요.
제가 아는 게 짧아서 잘못 생각한건지 어떤지 모르겠지만 일단 현재로는 제 생각에는 경로 수정을 해줘야 되는 거 아닌가 싶습니다.
댓글목록
최고관리자님의 댓글
최고관리자 작성일
음.. 마지막 부분.. 확인 차원에서 경로 변경을 해줬더니 오류가 발생하네요.
원래 경로가 맞나 봅니다. ^^
최고관리자님의 댓글
최고관리자 작성일
네이버 신디케이션 설치 파일 다운로드
http://dev.naver.com/projects/syndication