달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

이 문서는 Trackback CGI를 제작하기 원하는 이들을 위해 제공하는 도움서일 뿐입니다.
제로보드용 블로그 스킨 Paz에 트랙백 기능을 추가해달라는 요구들이 많더군요. 제가 직접 할까하고 손 댔다가, 역시 코딩은 만만치 않군요. ^^; 저보다 더 잘 코딩해주실 분들이 많이 계시고, 또 현재 준비중이신 것 같아서 제가 직접 하는 것보다는 그분들을 위한 CGI설계에 도움되는 쪽이 나을 것 같아 이 문서를 작성합니다.

트랙백의 flow
트랙백은 간단한 HTTP + XML의 형태로 구현가능합니다.
편의상 트랙백을 보내는 쪽을 sender, 받는 쪽을 receiver라고 칭하겠습니다.

sender.cgi에서 receiver.cgi로 HTTP를 통해 보내는 정보는 다음과 같습니다.

POST Method


title : 해당 엔트리의 타이틀
url : 해당 엔트리의 고유주소
excerpt : 해당 엔트리의 내용 요약(혹은 설명)
blog_name : 블로그의 이름

그렇다면 receiver는 POST로 넘어온 이 값을 DB나 TXT등으로 저장 후, 잘 받았다는 값을 sender쪽에 회신해주면 됩니다.

이상이 트랙백의 전부입니다. 너무 간단하다구요? ^^; 맞습니다.

조금 더 상세히 살펴보도록 하지요.

사용자가 트랙백을 보내고자 할 때 sender와 receiver가 해야할 일은 다음과 같습니다.

1)트랙백 메시지 준비하기.
receiver쪽에 전달할 트랙백 메시지를 준비합니다. 필요한 어트리뷰트는,
*title:현재 문서의 제목
*url:현재 문서의 고유주소
*excerpt:현재 문서 내용의 요약 혹은 설명 (255자 이하로 축약하는 것이 좋음. 본문 내용에서 적당히 끊으면 되겠죠?)
*receipt:받는 쪽의 트랙백수신 CGI 주소 (사용자가 텍스트 박스등에 입력하도록 해야겠지요?)

2)트랙백 전달
receipt로 title, url, excerpt의 값을 POST 메쏘드를 이용해 전달합니다. 그리고 회신이 돌아올 때까지 기다립니다.

3)트랙백 수신
receiver쪽에서는 receipt로 넘어온 값을 확인한 후, sender에게 회신을 보내줍니다.
다음은 php로 작성한 간단한 receiver.php입니다.

<?
$fh = fopen("./tb.log", 'w');
$results = print_r($_POST, true);
$id = $_GET['id'];
fwrite($fh, $id);
fwrite($fh, $results);
fclose($fh);
header("Content-Type: text/xml");
print "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
print "<response>\n";
print "<error>0</error>\n";
print "</response>\n";
?>


이것만으로도 충분히 트랙백을 수신할 수 있습니다. 물론 실제로 활용하기 위해서는 받은 트랙백값을 DB에 저장해야겠지요. 위의 코드에서 id는 수신하는쪽의 문서의 id를 말합니다. 각 개별문서마다 일일이 트랙백 수신 CGI를 만들어 줄 수 없기 때문에 공용 수신 CGI를 이용해야 할테고, 그러자면 송신측에서는 자기가 어느 문서를 향해 보내는지 알리기 위한 id가 필요하겠죠. 이 id는 트랙백 규격에는 포함되지 않으므로 GET method로 그냥 보내면 됩니다. receiver.php?id=123 이런 식으로 말이죠.

header()이하 부분은 정상적인 트랙백 메시지일 경우 잘받았다는 회신으로 Sender쪽에 Response해줍니다. php에서는 그냥 print로 출력해버리면 되지요. ^^; 만약 정상적인 트랙백 메시지가 아니라서 수신을 거부할 경우 error 항목을 0대신 1로 바꿔주면 됩니다.

4)트랙백 회신 확인
이번엔 sender쪽에서 Response 받은 문자열을 분석해서 error가 0인지, 1인지 확인하면 되겠죠. 그에 따라 적당한 메시지를 출력해주면 끝.

5)문서 출력시
일단 DB를 뒤져서 이 문서로 들어온 트랙백 데이터가 있는지 확인합니다. 데이터가 있으면 문서 중에 적당한 자리에 그 정보를 붙여 넣으면 됩니다.


6)트랙백 자동발견용 RDF 아이템 문서내 삽입.
트랙백을 걸 수 있게 준비가 되면, 트랙백을 걸어도 좋다는 메시지를 문서속에 삽입해야합니다.

<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">

<rdf:Description
rdf:about="[Entry Permalink]"
dc:title="[Entry Title]"
dc:identifier="[Entry Permalink]" />
trackback:ping="[http://yourserver.com/cgi-bin/receiver.cgi/][TrackBack ID]"
</rdf:RDF>
-->

위의 코드를 각 문서내에 적절히 삽입하시면 됩니다. []안의 내용은 삽입되는 문서에 맞게 수정되어야겠지요?
만약 트랙백을 보내기 전에 먼저 해당 문서를 읽어들여, 저 코드를 발견한다면 사용자가 receiver.cgi?id=xxx식으로 일일이 적어줄 필요가 없겠죠? MT등에서는 실제로, 엔트리 작성시 본문에서 언급된 모든 링크를 찾아 다니면서 저 아이템이 있으면 자동으로 트랙백을 걸어줍니다. 사용자가 트랙백할 주소를 일일이 지정하지 않아도 되니 편리하겠지요. 요런 기능도 여유가 되시면 구현하면 좋겠죠.

그외의 트랙백 관련 확장으로는, 카테고리 별 자동 트랙백(특정 카테고리로 입력되는 엔트리는 무조건 특정 주소로 자동으로 트랙백 보내기)과, 한번에 복수개의 트랙백 보내기등이 구현되면 될 것 같네요.

혹시 개발시에 문제가 되거나 궁금하신 점이 있으면 말씀하세요.

<출처 :
http://eouia.net >

'JAVA > JSP_Servlet' 카테고리의 다른 글

[링크]자바로 만든 블로그  (2) 2005.02.11
간단한 trackback ping 보내는 JSP ..  (0) 2005.02.04
[펌] 검색엔진 만들기  (0) 2005.01.21
[javamail] 제목 깨질때...  (0) 2005.01.18
[펌] 메일 헤더 구성 요소  (0) 2005.01.17
Posted by tornado
|