트랙백을 걸때 복수로 할 수 있습니까? 정보
트랙백을 걸때 복수로 할 수 있습니까?본문
제 홈페이지에서 트랙백 실험을 하고 있는데 다음의 경우가 가능한지요.
가령 네이버 블로그의 다른 사람 글(A)에 제 홈페이지 게시판 글(B)로 트랙백을 걸었습니다. 여기(B)에서 다시 다음 블로그의 또 다른 사람 글(C,D,E, ....)로 복수로 트랙백을 걸 수 있습니까?
다수가 문제라면 최소한 2개의 트랙백이 가능한 방법이 있습니까?
이 경우 wr_trackback 내용이 최신 것으로 덮어 씌워지는 것입니까 아니면 새 필드를 추가해 놓아야 하나요.
제 홈 페이지 성격상 이 부분이 꼭 필요해서 그럽니다. (www.biz-nara.com)
이상
가령 네이버 블로그의 다른 사람 글(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);
}
내부에서 쉼표로 구분되는 여러개의 트랙백주소로 반복해서 트랙백을 보내고, 에러가 나는 경우를 모아서 한꺼번에 리턴하도록 했습니다.
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);
}
답변 감사드립니다.
아직 실험은 안 해 보았지만 가능하다는 점에 고무 되었습니다.
실험을 해 보고 의문사항은 또 질의를 드리겠지만 귀 답변은 제 문제 해결에 상당한 도움이 될 듯합니다.
아직 실험은 안 해 보았지만 가능하다는 점에 고무 되었습니다.
실험을 해 보고 의문사항은 또 질의를 드리겠지만 귀 답변은 제 문제 해결에 상당한 도움이 될 듯합니다.