트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기(下) > 그누3 팁자료실

그누3 팁자료실

트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기(下) 정보

PHP 트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기(下)

본문

Posted by TheMics

트랙백 구현하기 - 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님께서 생각하신대로 말씀하시면 다음 버전에 패치를 적용하실것도 같은데요.
저도 그렇게 되었으면 좋겠습니다.
혹시라도 게시판이 무거워지는 문제가 발생한다면 플러그인으로 적용하면 될듯도 한데 제가 잘 모르니 도움을 못 드려 죄송합니다.

물론 칼자루는 관리자님의 손에............^^*
멀뚱멀뚱....  @.*
그래도...뭔가 진화하고 있는거니까요....
알기쉬운 뭔가가 나오겠죠?..
많이 수고하시고요...기대합니다..!!  =:-)
헉... 전 7쟁이님이 알려주셔서 퍼다놓은거였는데...ㅋㅋㅋ
XML RSS부터 시작하여 한 두어달 기다리신것 같은데... 조금만 더 기다려 주십시오.
진행상황은 ....
트랙백핑 보내는것은 마무리 되었고.. 트랙백 받는것도 거의 정리되었는데...
약간의 디버깅과 받은것을 어떻게 처리하여야 보여주는 스킨작업하는데 쉽게 작업하도록 할것인가를 고민중입니다.
전체 1,026
그누3 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT