이글루스 싱크블로그 만들기 - Syncer 

Simple View | Forum View

설치형 블로그에서 이글루스에 만든 자신의 블로그로 싱크해서 글을 올리수 있게 해주는 CGI와 MT용 플럭인입니다.

CGI는 설치용 블로그의 종류에 상관없이 작동합니다. 즉, POST방법으로 제목/본문 등의 값을 이 CGI로 전송하면, 별도의 창을 통한 로그인 등의 방법없이 바로 글의 저장과 동시에 싱크블로그(이글루스)로 글이 포스팅됩니다. MT용 플럭인은 이 CGI를 MT에서 사용할 수 있게, 즉 MT의 엔트리 입력창에서 바로 값을 CGI로 전달할 수 있게 해주는 중간 역할을 하는 놈입니다. 이 부분이 꼭 플럭인 형태가 될 필요없이, 해당 소스 수정으로도 가능합니다만, MT에선 플럭인 형태로 만들었습니다. 이 부분만 여타 설치형에서 적합하게 만들면 바로 이용하실 수 있습니다.

현재 30여 블로그/홈피 사이트의 CGI를 만들었지만 먼저 가입형 블로그의 선두주자격인 이글루스 블로그로의 싱크 스크립트부터 공개합니다.

이 프로그램은 설정이나 설치가 절!대! 어렵거나 까리한 부분이 하나도 없습니다. 다만, 두개의 블로그를 오가며 테스트해봐야 하고 설정을 해줘야 하기 때문에, 처음 볼 때 복잡하다는 감을 받을 수 있습니다. 그냥 일단 가벼운 마음으로 어떤 식으로 설치가 이루어 지고, 어떤 설정을 "왜" 하나 정도만 눈팅한다는 기분으로 훑으신 후에, 컨디션 좋을 때 한번에 설치/운용하시면 될 거 같습니다.

0. Disclaimer

이 플럭인과 CGI를 이용해 발생하는 모든 이익과 손실은 오로지 사용자 본인에게 귀속됩니다. 이 프로그램을 다운받아 설치하는 순간부터 자신의 책임하에서 운용됨을 명심하시기 바랍니다.

* 참고로 저 또한 제 책임하에서 운영 잘 하고 있습니다. 쫄지 마십시요. 

1. 설 치

압축파일을 다운받아 풀면, Syncer.plelgoos.cgi가 나옵니다.

Syncer.pl 은 mt/plugins 폴더로 옮기고, egloos.cgi 는 적절한 자신의 폴더에 옮긴 후, 실행 퍼미션이 있나 확인합니다. ( $ chmod +x egloos.cgi) 이하 /alog/cgi/ 밑에 설치된 것으로 가정합니다.

 

2. 이글루스 블로그 사전 준비

이글루스에 자신의 블로그를 만듭니다. 가능하면 자신의 블로그명과 일치하는 블로그 이름을 설정하는게 좋을 것입니다.

이 Syncer 는 해당 글의 카테고리 설정을 유지시켜 줄 수 있습니다. 따라서 현재 엠티의 카테고리를 반영하도록 이글루스에서 카테고리를 생성해 줍니다.

이때 반드시 엠티의 카테고리와 정확한 (엠티)1:1(이글루스) 관계가 될 필욘 없습니다.  이름이 같을 필요도 없습니다. 다만, 실제 엠티 상에서 글을 쓰고 거기서 카테고리를 선택하게 되니까, 기왕이면 이에 맞추는 것이 싱크블로그상에서도 일관되어서 좋을 것입니다.

 

3.  템플릿 추가수정

엠티의 엔트리 입력 화면에 아래와 같이 비밀번호 입력란과 싱크하고자 하는 블로그를 선택할 수 있는 체크박스를 삽입하기 위함입니다.

mt/tmpl/cms/edit_entry.tmpl 을 열고 <TMPL_IF NAME=POSITION_BUTTONS_BOTTOM> 부분을 찾습니다.  그 부분 위에 적절히 아래 <!-- == --> 사이의 내용을 삽입합니다.

<!-- ======================================================== -->
<div class="field">
<p>&nbsp;&nbsp;&nbsp;<label>&nbsp;Password&nbsp;</label><input type="password" name="blogspswd" size="12" /></p>
<ul>
<li><input type="checkbox" name="egloos" value="1" /><a href="http: //alogblog.egloos.com" target="egloos">Egloos - alogblog.egloos.com</a></li>
<li><input type="checkbox" name="enbee" value="1" /><a href="alogblog.enbee.com" target="enbee">Enbee - alogblog.enbee.com</a></li>
</ul>
</div>
<!-- ======================================================== -->
<br style="clear: left;" />
</div>
</TMPL_IF>
<TMPL_IF NAME=POSITION_BUTTONS_BOTTOM>

위 입력 값에서 http:// alogblog.egloos.com 으로 된 부분은 무엇으로 바꿔야 할까요? 안가르쳐 드립니다. 알아서 적절한 값으로 바꾸십시요. enbee.com 부분은 향후 추가 싱크 블로그가 추가되면 저런 식으로 <li>...</li>사이에 추가로 들어간다는 모습을 보여주기 위해 그냥 넣어둔것입니다.  http://alogblog.com/doc/syncblog.html 이곳을 보시면, 현재 테스트에 성공한 블로그/홈피 리스트가 실제 MT의 엔트리 입력창에 나타난 모습을 보실 수 있습니다.

 

 4.  플럭인 Syncer.pl  설정

이 부분은 다른 설치형 블로그에 이를 도입시, 처리해줘야 되는 부분의 이해에 관계됩니다.

Syncer.pl 을 여시면 맨 윗줄에 위와 같은 부분이 나옵니다.

use strict;
use lib ('/home/hosting_users/.../www/mt/extlib');
use MT::Util qw(format_ts);

my $use_TCode = 1;
my $my_href_src_base = 'http://alogblog.com';
my $syncer_cgi_url = 'http://alogblog.com/alog/cgi/';

먼저 이 플럭인의 역할을 잠시 설명하겠습니다.
이 놈은 엠티가 엔트리를 저장한 후에 수행됩니다. 사용자가 입력한 제목/본문/확장문 등의 값을 적절한 싱크 블로그 CGI에게로 넘겨주는 역할을 합니다. 이때 해당 싱크블로그가 자신의 설치형 블로그와 다른 인코딩일 경우에, 선택된 싱크블로그의 인코딩으로 당연히 바꿔서 보내줘야 할 것입니다.

  • use lib ('/..../mt/extlib');

결국 이 플럭인의 작동에는 LWP::UserAgent, URI::Escape, HTTP::Request 모듈이 설치되어 있어야 합니다. 아마 MT를 설치했다면, mt/extlib 밑에 위 모듈이 기본적으로 설치가 되는것 같습니다. 그래서 위 소스에서처럼, use lib 구문에서 mt/extlib까지의 절대경로를 적어줘야 합니다. 만약 그 아래 해당 모듈이 없다면,  모듈 설치 후 그 설치된 경로를 위처럼 적어줘야 합니다.

  • my $use_TCode = 1;

TCode는 제가 만든 트랙백스팸 방지 플럭인입니다. 이를 이용하면 트랙백주소(아이디 번호부분)이 길게 바뀝니다. 이를 사용하시는 분은 1을 주시고, 안쓰시는 분은 0으로 설정합니다.

  • my my_href_src_base = 'http:// myblog_domain'; ( '/' 로 끝나지 않습니다.)

자신의 엔트리 글에 이미지를 포함하고, 그 이미지의 경로가 도메인네임을 포함하는 풀경로가 아니고 웹루트에서 시작하는 상대경로일 경우에, 여타 싱크블로그로 글을 옮기면 당연히 이미지/링크가 깨집니다. 그래서 본문/확장문의 처음에 <base href="자기 블로그 도메인"> 을 삽입해서 싱크블로그상에서도 자신의 서버에 있는 이미지나 문서에로의 링크를 가리킬 수 있도록 해주는 놈입니다.

  • my $syncer_cgi_url = 'http://alogblog.com/alog/cgi/'; ('/' 로 끝납니다.)

위 설치과정에서 egloos.cgi를 복사한 폴더로의 URL 경로입니다.

 

5.  egloos.cgi 설정

정말 싱크블로그 한번 돌리기 힘드시죠? 이거 원 설정할게 이리 많아서야... 하지만 복잡 미묘한 설정은 하나도 없습니다. 한번만 지긋이 참아보십시요.

### ############################################################

BEGIN {
 unshift(@INC, '/home/hosting_users/.../www/mt/extlib');
}

use strict;
use CGI qw/:standard/;
use HTTP::Request;
use HTTP::Request::Common qw(POST);
use HTTP::Cookies;
use LWP::UserAgent;
use URI::Escape;

### ############################################################

egloos.cgi의 첫부분입니다. 이 Perl CGI가 사용하는 모듈들입니다. 앞서와 같이 mt/extlib 에 대부분 존재하는 모듈입니다. 혹 그 아래에 없는 모듈은 제 블로그에 있는 사용자모듈설치하기를 보시고 설치 후, 해당 폴더를 추가해 주시면 됩니다.

### ############################################################

my %category_ids = (
 '5'  => ['3', 'About'],
 '6'  => ['4', 'Living',  'diary'],
 '7'  => ['5', 'Odds and Ends'],
 '11' => ['6', 'Goodies', 'music'],
 '8'  => ['7', 'Blog'],
 '12' => ['8', 'Looking-glass', 'open-meeting'],
 '9'  => ['9', 'Omnibus', 'movie'],
 '10' => ['10', 'Gotchas', 'news-critics']
);
my $my_egloo_id = "alogblog";
my $my_egloo_blog_id = "b0040562";
my $my_extended_words = "More...";
my $my_tb_url_base = 'http://alogblog.com/mt4/mt4/mt-tb.cgi/';

my $my_tb_div_css = "padding:3px;border:0px dashed #ccc;background:#333;color:white;";
my $my_tb_input_css = "width:450px;color:white;background:transparent;border:1px solid gray";

my $POST_OPEN = '0';   # '0' : 글 비공개, '' : 공개
my $COMMENT_OPEN = '0';   # '0' : 덧글 금지, '' : 허용
my $TRACKBACK_OPEN = '0';  # '0' : 트랙백 금지, '' : 허용

### ############################################################

자, 여기서부터 하일라이트 입니다.

  • my %category_ids = ('6' => ['4', 'Living', 'diary'], ....);

이 변수는 엠티의 카테고리와 싱크블로그(여기선 이글루스)의 카테고리를 매칭시켜주는 역할을 합니다. 위 하나만 놓고 설명하겠습니다.

'6' 은 MT 블로그상의 Living이라는 이름의 카테고리의 번호(category id)입니다. '4'는 이글루스 상에서 'Living"에 해당하는 카테고리의 번호입니다. 이까지만 놓고 다시 설명해보면, 엠티에서 6이라는 값을 가지는 카테고리에 속하는 글은 이글루스에 4라는 카테고리로 포스팅하라...라는 의미입니다. 쉽죠?

이때 'Living'이라는 값은 엠티의 값이 아니라 이글루스의 값입니다. 엥? 먼소리?
이글루스에선 글을 입력할 때, 해당 글의 카테고리 번호(id)와 함께 그 카테고리의 이름도 같이 요구를 합니다. 즉 이때의 'Living'이라는 값은 이글루스에서 설정한 카테고리의 이름과 같아야 한다는 소립니다. 달리 말하자면, 실제 6이라는 값을 갖는 MT 카테고리의 이름은 "살며사랑하며" 일 수도 있었다는 소리입니다.

끝의 'diary'는 이글루스에 고유한 기능의 반영입니다. 즉, 이글루스에선 하나의 글을 최대 3군데의 소위 "트랙백 밸리"라는 트랙백저장소로 선택해 보낼 수가 있습니다.(한번 이글루스에서 글을 직접 써보십시요) 그리고 이 트랙백 밸리의 종류가, "영화, 음악, 여행,,," 등이 있는데 아무리 제가 봐도 한글이 이런 분류를 두군데 이상 걸치기는 불가해 보이더군요. 즉 영화 트랙백밸리에 속할 글이 음악도 속하고...머 이런 경우 말입니다. 그래서 실제 구현의 간편함까지 고려해, 이 CGI로는 하나의 글은 하나의 트랙백 밸리로만 핑을 보낼 수 있게 했습니다.

위에는 나와있지 않지만 소스의 해당부분 아래에 보면, %tb_valley 라는 변수에 'movie', 'music', 'book' 등의 밸리 이름이 영어로 나와있습니다. 고로 위의 경우에 완전히 해석하면, MT의 6에 해당하는 글은 이글루스에 Living이라는 이름의 카테고리 넘버 4로 보내고, 또 'diary' (일기)라는 트랙백밸리로도 핑을 보내게 하라...라는 의미가 됩니다. 어렵나요? 아닌데...

다른 값들을 보니 마지막 인자인, 트랙백밸리 이름이 없는 것도 보입니다. 만약 자신의 엠티 카테고리를 포함하는 적절한 이글루스 트랙백밸리가 없다면, 굳이 공짜라는 생각에 입력할 필요는 없겠죠.

제 경우에 거의 모든 싱크블로그 상에서 엠티의 카테고리 분류와 이름이 같게 만들어줬습니다. 하지만 꼭 그럴 필요는 없습니다. 마지막으로 하나의 예를 들어 보겠습니다.

'1' => ['2', 'Category1'], '2' => ['2', 'Category1'], 이런 식은 어떤 의밀까요? 즉 엠티에서의 두개의 카테고리가 이글루스에선 하나의 카테고리로 합쳐져서 보내지는 경우군요. 이때 엠티의 1,2 카테고리는 메인/서브 카테고리 관계일수도 있겠지요...

  • my $my_egloo_id = "이글루스 로그인 아이디";
    my $my_egloo_blog_id = "b0040562";

변수명 그래로 입니다. 첫번째는 자신의 아이디, 두번째는 이글루스 블로그의 아이디입니다. 이 두번째 값은 이글루스에서 자신의 블로그에 특정한 번호를 부여하는 데 그 값입니다. 이런 값들은, 이글루스에서 새글을 쓰는 화면으로 들어가서, "소스보기"를 통해 소스를 보고 blog_id정도의 값으로 찾아보면 나옵니다.

  • my $my_extended_words = "More...";
    my $my_tb_url_base = 'http: //alogblog.com/mt/mt-tb.cgi/'; ( 끝에 '/' 가 붙습니다.)

이 싱커는 엠티의 Entry Body와 Extended Body 부분을 이글루스에 반영하는데, 이글루스의 경우 확장부분은 'More..'등으로 표현된 링크를 클릭하면 나옵니다. 그런데 이 값을 자신이 원하는 값으로 설정할 수가 있더군요.

두번째값은 자신의 트랙백 URL의 끝에 ID부분을 제외한 부분의 주소입니다. 기본적으로 싱크블로그의 트랙백관리의 일원화를 위해, 모든 싱크블로그에는 디폴트로 트랙백금지로 설정을 하고, 엔트리의 끝에 자신의 메인블로그상의 트랙백주소를 붙여서 표시하는 형태로 운용됩니다.

  • my $my_tb_div_css = "padding:3px;border:0px dashed #ccc;background:#333;color:white;";
    my $my_tb_input_css = "width:450px;color:white;background:transparent;border:1px solid gray";

이때 본문의 끝에 자신의 엠티 블로그의 트랙백 주소를 나타내는 부분의 CSS디자인 값입니다. 당장에 변경할 필요는 없고, 향후 자신의 이글루스 블로그의 디자인 색상에 맞춰 적절히 수정하면 됩니다. http://alogblog.egloos.com/ 이부분에 현재로 싱크된 하나의 엔트리가 있는데, 위의 'More..' 부분과 본문의 밑에 나타난 실제 "트랙백 URL" 부분의 형태와 값을 유심히 보십시요. 이글루스 트랙백 주소가 아니라, 메인 블로그상의 주소일 것입니다. 이는 여러개의 싱크블로그가 존재할 경우에, 트랙백을 자신의 설치형 블로그의 해당 엔트리로 모아주기 위함입니다.

  • my $POST_OPEN = '0';                # '0' : 글 비공개, '' : 공개
    my $COMMENT_OPEN = '0';      # '0' : 덧글 금지, '' : 허용
    my $TRACKBACK_OPEN = '0';  # '0' : 트랙백 금지, '' : 허용

이글루스에서 글을 하나 써보면 아시겠지만, 하나의 글에 대해 포스트 공개/금지, 덧글입력 공개/금지, 트랙백 금지/허용 등의 옵션을 줄 수가 있습니다. 각각의 경우 금지할 경우 '0' 으로 설정하고, 공개/허용하는 경우엔 값을 지우는 형태로 입력하면 됩니다.

6. 기타 사항

  • 먼저 MT의 엔트리 입력 창에서 글을 입력한 후에, egloos 란에 체크를 해준 후에, 비밀번호를 적고 "Save"버튼을 누르면 됩니다.
  • MT에서 Post Status를 Draft로 해놓고 저장을 해도, 체크를 했을 경우엔 전송이 됩니다. 즉 이 엠티 플럭인은 엔트리가 DB에 저장될때 작동하는 것이지, 퍼블리싱될 때 작동하는게 아니기 때문입니다.
  • 기존에 이미 작성한 글들에 대해서도, Edit Entry로 들어가 글을 띄운 후, 체크를 하고 다시 저장하면 이글루스로 글이 전송됩니다.
  • 비밀번호가 틀렸거나 여타 다른 이유로 전송이 성공하지 못한 경우에도 어떤한 메시지 값도 보여주지 않습니다. 기본적으로 두개 이상의 싱크블로그 채택을 염두에 뒀기때문에, 사이드이펙트로 전송상황에 대한 메시지표시가 나타날 여지가 없어져 버렸습니다.
  • Save 버튼을 누르고 글을 이글루스에 전송한 뒤, 엠티의 엔트리 작성화면에 나와있는 이글루스로의 링크를 클릭해 자신의 이글루스 블로그를 띄워 확인해 볼 수 있습니다. 이때 오해하기 쉬운 점은, MT내에서 스크립트를 통해 이글루스로 로그인하고 글을 전송했다는 사실과 실제 자신의 로컬피씨상에 떠있는 "브라우져"로 로그인하는 사실을 혼동하는 것입니다. 즉 이글루스로 글을 전송하기 위해 "로그인"한 것은 자신의 블로그 "서버"상에서 일어난 일입니다. 로그인해서 받은 쿠키는 자신의 "피씨"가 아니라 자신의 "서버"에 있습니다. 고로 글을 전송후에 링크를 클릭해서 이글루스를 띄워봐도 "로그인"된 상태가 아니게 됩니다. 이는 정상입니다. 먼소린지 모르셔도 큰 상관없습니다.
  • 실제 사용하기 전에 테스트하는 단계에서 알아 두셔야 할 사항입니다.
    먼저 테스트용 글을 하나 간단히 새로 적습니다. 그리고 "Draft"상태로 설정하고 저장합니다. 연습글의 메타사이트 등록방지목적입니다. 드래프트 상태라도 싱크블로그로 전송이 됩니다.
    그리고 egloos.cgi의 위 설정에서 반드시 $POST_OPEN = '0' 인 비공개로 설정하고 글을 보내서 테스트하십시요. 같은 이유에서 입니다. 글이 잘 전송됬는가는 직접 브라우져상에서 로그인해 들어가서 확인하십시요.(비공개설정이므로 그냥은 나타나지 않습니다.) 잘 가면 이제 $POST_OPEN ='' 으로 해주시고, 자알~ 사용하시면 됩니다.
  • 소스를 적절히 입맛에 맞게 수정하시면, 다양한 형태로 싱크 블로그를 운용하실 수 있습니다. 현재의 디폴트 상태는 본문과 확장문 모두를 싱크블로그로 전송해 원 엔트리 그대로의 모습으로 이글루스에 나타냅니다. 만약 이런 식이 아니라, 일종의 쇼윈도 블로그(Show-window Blog, 참 말 잘 만들죠?)로 글의 본문만 짧막 하게 보내고, 그 본문 밑에 메인 엔트리의 개별 주소를 More...형식으로 가지게 하면, 실제 그것의 방문자는 작은 본문만 보고 더 보고 싶어 클릭하면 자신의 메인 블로그의 개별 해당페이지가 뜨게 하는 겁니다. 머 기타 여러 변종이 있을 수 있을 겁니다.
  • 실제 싱크 블로그 운용시에 유의해야 하는 부분 등을 숙지하는게 좋을 것같습니다. http://alogblog.com/alog/archives/2005/04/04_싱크_블로그에_대한_모든_것/

Post a comment

  • PGP/GPG 서명된 코멘트를 지원합니다. ?
  • 이메일 주소는 정중히 사절합니다.
  • 이름(닉네임)/블로그 주소는 필수 입력사항입니다.
  • 이미지는 자기 블로그상의 대문이미지 등을 사용하셔도 좋습니다.
  • 코멘트에 달린 이미지를 클릭하면 자신의 블로그로 연결됩니다.
  • 깨진 블로그/이미지 주소를 가진 코멘트는 수정/삭제 대상입니다.


  •   Forget me

    ?