그누보드와 네이버 신디케이션 연결 및 확인 방법, 설치 방법

최고관리자 6년전 신고 

그누보드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 파일이 존재하지 않거든요.

제가 아는 게 짧아서 잘못 생각한건지 어떤지 모르겠지만 일단 현재로는 제 생각에는 경로 수정을 해줘야 되는 거 아닌가 싶습니다.


모바일 버전으로 보기