그누보드와 네이버 신디케이션 연결 및 확인 방법, 설치 방법
최고관리자
2014-03-04 (화) 22:59
8년전
신고
그누보드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 파일이 존재하지 않거든요. 제가 아는 게 짧아서 잘못 생각한건지 어떤지 모르겠지만 일단 현재로는 제 생각에는 경로 수정을 해줘야 되는 거 아닌가 싶습니다. |