트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기(下) 정보
PHP 트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기(下)
관련링크
본문
트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기(下)
앞편에서 이어서 소켓 연결을 통해 보낼 내용을 정리해 보겠습니다. 이는 HTTP프로토콜에 규정된 형태인데, 자세한 형식의 내용은 그리 중요치 않습니다. 간단하게 트랙백 URL 서버의 해당 주소에 POST로 $t_data의 변수들을 넘겨주는 거라고 생각하시면 됩니다. 여기서 User-Agent부분에는 자신의 프로그램 이름 따위를 넣어주시면 됩니다(없어도 상관없습니다).
$send_str = "POST ".$uinfo[path]." HTTP/1.1\r\n".
"Host: ".$uinfo[host]."\r\n".
"User-Agent: MTools\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Content-length: ".strlen($t_data)."\r\n".
"Connection: close\r\n\r\n".
$t_data;
이제 데이터를 정리했으니 3번째 단계로 넘어가 핑을 보내고 답변을 받아와야 합니다. 핑을 보낼 때에는 fsockopen을 통해 해당 서버에 연결한 후 fputs로 위 내용을 전송해주면 됩니다.
$fp = fsockopen($uinfo[host],$uinfo[port]);
fputs($fp,$send_str);
그리고 응답을 가져옵니다. while문을 통해 128바이트씩 끝까지 가져오도록 하겠습니다. 응답을 가져왔으면 연결을 종료합니다.
while(!feof($fp)) $response .= fgets($fp,128);
fclose($fp);
이제 돌아온 정보를 분색해봐야 합니다. 우선 XML의 형태로 되돌아오지 않았을 경우 트랙백 주소가 아닌 일반 주소로 간주합니다. 우리는 <response>택의 유무로 간단하게 검사해 보겠습니다.
if(!strstr($response,"<response>")) {
$tb_error_str = "올바른 트랙백 URL이 아닙니다.";
return false;
}
존재한다면 이제 XML부분을 뽑아와야 합니다. $response안에 담긴 내용은
HTTP/1.1 200 OK
...................
Content-Type: text/xml
등의 기본 헤더 정보 이후에야 출력 내용이 등장합니다. 그러므로 XML의 시작 부분부터 마지막 택인 </response>까지만을 잘라내서 처리하도록 하겠습니다.
$response = strchr($response,"<?");
$response = substr($response,0,strpos($response,"</response>"));
마무리 부분만 남았습니다. 뽑아온 자료에 에러가 포함되어있는지를 확인합니다. 간단하게 <error>0</error>가 포함되어 있을 경우 성공으로 간주합니다(<message>의 유무도 좋습니다. 단 원칙대로라면 정규식을 통해 각 택의 내용을 불러와 검사해야 합니다). 그렇지 않을 경우 <message></message>사이의 에러 내용을 돌려줍니다.
if(strstr($response,"<error>0</error>")) return true;
else {
$tb_error_str = strchr($response,"<message>");
$tb_error_str = substr($tb_error_str,0,strpos($tb_error_str,"</message>"));
$tb_error_str = str_replace("<message>","",$tb_error_str);
$tb_error_str = "트랙백 전송중 오류가 발생했습니다: $tb_error_str";
return false;
}
//함수끝
}
이제 소스부분은 끝났습니다. 실제 사용시에는
$res = send_tb("트랙백 URL","글 URL","제목","블로그 이름","내용");
if(!$res) {
echo("트랙백 전송시 에러 발생: $tb_error_str");
} else {
//성공시 처리
}
와 같이 사용하면 됩니다.
0
댓글 전체

관리자님과 합의는 잘 보셨는지 궁금합니다.
이 글을 올리신 의도를 보면 root님께서 생각하신대로 말씀하시면 다음 버전에 패치를 적용하실것도 같은데요.
저도 그렇게 되었으면 좋겠습니다.
혹시라도 게시판이 무거워지는 문제가 발생한다면 플러그인으로 적용하면 될듯도 한데 제가 잘 모르니 도움을 못 드려 죄송합니다.
물론 칼자루는 관리자님의 손에............^^*

그래도...뭔가 진화하고 있는거니까요....
알기쉬운 뭔가가 나오겠죠?..
많이 수고하시고요...기대합니다..!! =:-)

전 루트님이 해놓을때까지 기다립니다. ㅡㅡa
XML RSS부터 시작하여 한 두어달 기다리신것 같은데... 조금만 더 기다려 주십시오.
진행상황은 ....
트랙백핑 보내는것은 마무리 되었고.. 트랙백 받는것도 거의 정리되었는데...
약간의 디버깅과 받은것을 어떻게 처리하여야 보여주는 스킨작업하는데 쉽게 작업하도록 할것인가를 고민중입니다.
그렇군요


수고 많이 하셨네요