트랙백을 걸때 복수로 할 수 있습니까? > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

트랙백을 걸때 복수로 할 수 있습니까? 정보

트랙백을 걸때 복수로 할 수 있습니까?

본문

제 홈페이지에서 트랙백 실험을 하고 있는데 다음의 경우가 가능한지요.

가령 네이버 블로그의 다른 사람 글(A)에 제 홈페이지 게시판 글(B)로 트랙백을 걸었습니다. 여기(B)에서 다시 다음 블로그의 또 다른 사람 글(C,D,E, ....)로 복수로 트랙백을 걸 수 있습니까?
다수가 문제라면 최소한 2개의 트랙백이 가능한 방법이 있습니까?
이 경우 wr_trackback 내용이 최신 것으로 덮어 씌워지는 것입니까 아니면 새 필드를 추가해 놓아야 하나요.

제 홈 페이지 성격상 이 부분이 꼭 필요해서 그럽니다. (www.biz-nara.com)

이상
  • 복사

댓글 전체

복수 트랙백을 거는 방법은, 여러가지가 있겠지만, 간단히 여러 트랙백주소를 , (쉼표) 로 분리해서 입력하고, lib/tracback.lib.php 를 다음과 같이 수정하면 될것 같습니다.  단 테스트는 안해봤습니다. ^^;
내부에서 쉼표로 구분되는 여러개의 트랙백주소로 반복해서 트랙백을 보내고, 에러가 나는 경우를 모아서 한꺼번에 리턴하도록 했습니다.

function send_trackback($tb_url, $url, $title, $blog_name, $excerpt)
{
  //내용 정리
  $title = strip_tags($title);
  $excerpt = strip_tags($excerpt);

  $tmp_data = "url=".rawurlencode($url)."&title=".rawurlencode($title)."&blog_name=".rawurlencode($blog_name)."&excerpt=".rawurlencode($excerpt);

  $error_msgs = array();
  $tb_urls = array_map('trim', explode(',', $tb_url));
  foreach($tb_urls as $tu) {
    //주소 처리
    $uinfo = parse_url($tu);
    if($uinfo[query]) $tmp_data .= "&".$uinfo[query];
    if(!$uinfo[port]) $uinfo[port] = "80";

    //최종 전송 자료
    $send_str = "POST ".$uinfo[path]." HTTP/1.1\r\n".
                      "Host: ".$uinfo[host]."\r\n".
                      "User-Agent: GNUBOARD\r\n".
                      "Content-Type: application/x-www-form-urlencoded\r\n".
                      "Content-length: ".strlen($tmp_data)."\r\n".
                      "Connection: close\r\n\r\n".
                      $tmp_data;
    $fp = @fsockopen($uinfo[host],$uinfo[port]);
    if(!$fp) {
      // return "트랙백 URL이 존재하지 않습니다.";
      $error_msgs[] = "트랙백 URL이 존재하지 않습니다.";
      continue;
    }

    //전송
    //$fp = fsockopen($uinfo[host],$uinfo[port]);
    fputs($fp,$send_str);

    //응답 받음
    while(!feof($fp)) $response .= fgets($fp,128);
    fclose($fp);

    //트랙백 URL인지 확인
    if(!strstr($response,"<response>")) {
      // return "올바른 트랙백 URL이 아닙니다.";
      $error_msg[] = "올바른 트랙백 URL이 아닙니다.";
    }

    //XML 부분만 뽑음
    $response = strchr($response,"<?");
    $response = substr($response,0,strpos($response,"</response>"));

    //에러 검사
    if(strstr($response,"<error>0</error>")) {
      // return "";
      continue;
    }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);
      // return "트랙백 전송중 오류가 발생했습니다: $tb_error_str";
      $error_msgs[] = "트랙백 전송중 오류가 발생했습니다: $tb_error_str";
    }
  } // foreach $tb_urls

  if(count($error_msgs)==0) return "";
  else return count($tb_urls)." 중 ".count($error_msgs)." 개의 트랙백 전송에 오류가 발생했습니다.\r\n내용:\r\n".implode('\r\n', $error_msgs);

}
답변 감사드립니다.
아직 실험은 안 해 보았지만 가능하다는 점에 고무 되었습니다.
실험을 해 보고 의문사항은 또 질의를 드리겠지만 귀 답변은 제 문제 해결에 상당한 도움이 될 듯합니다.
© SIRSOFT
현재 페이지 제일 처음으로