+2

Como fazer um trackback em PHP

criado por Rafael Zamana Kineippe em 06/11/2008 9:56am
Agora que sabemos o que é um trackback e como ele funciona, vamos fazer uma função capaz de mandar um trackback para cada referencia em nosso blog.

Nessa função mandaremos todos os dados necessários em um array, e a url completa do trackback que queremos.

<?php
function track_it($datastream, $url)
{ 
  //Retiramo o 'http://', não é necessario ele
  $url = preg_replace("@^http://@i", "", $url);
  //Pegamos o host que iremos chamar
  $host = substr($url, 0, strpos($url, "/"));
  //O caminho em que devemos fazer o trackback
  $uri = strstr($url, "/"); 
  $reqbody = "";
  //Arrumamos os dados
  //title=Mein+Site&url=www.foobar.com.br/blog/352&...
  foreach($datastream as $key=>$val) {
    if (!empty($reqbody)) $reqbody.= "&";
    $reqbody.= $key."=".$val;
  } 
  $contentlength = strlen($reqbody);
  //Montamos o corpo da requisição
  $reqheader =  "POST $uri HTTP/1.1\r\n".
                   "Host: $host\n". "User-Agent: PostIt\r\n".
                   "Content-Type: application/x-www-form-urlencoded\r\n".
                   "Content-Length: $contentlength\r\n\r\n".
                   "$reqbody\r\n";
  //Abrimos a conexão 
  $socket = fsockopen($host, 80, $errno, $errstr);
  //Caso ocorra algum erro, colocaremos esse erro em um array $result
  if (!$socket) {
     $result["errno"] = $errno;
     $result["errstr"] = $errstr;
     return $result;
  }
  //Faremos a nossa requisição
  fputs($socket, $reqheader);
  //E pegamos o resultado e alocaremos em um array
  while (!feof($socket)) {
     $result[] = fgets($socket, 4096);
  }
  fclose($socket);
  //Vamos retornar todo o resultado
  return $result;
}
?>

Agora que temos a nossa função, vamos montar a chamada pra essa função.

<?php
//Array com os dados a serem enviados para o Trackback
$datastream = array(
  'title'=>'Como fazer um trackback',
  'url'=>'http://www.foobar.com.br/blog/?id=52',
  'excerpt'=>'Alguma descrição',
  'blog_name'=>'Mein Site'
);

//URL do TrackBack, completa, a função irá separar
$url = 'http://www.foo.com/trackback/?id=521';

$track = track_it($datastream, $url);

//Com o print_r iremos ver todo o array e suas informações
print_r($track);

?>

Alguns blogs não retornam informação, então não fique chateado se não funcionar, entre no blog que você fez a requisição e verifique os coments, pois muitos blogs utilizam o trackback nos coments.

Comentários:

Mostrando 1 - 2 de 2 comentários
Dam disse:
Bom artigo.
20/11/2008 4:21am (~9 anos atrás)

realmente muito esse post e muito util tb. valew chefe...
11/11/2008 4:35am (~9 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)