Jak na Trackback

Trackback je nástroj, s jehož pomocí je možné při psaní reakce na něčí článek jednoduše upozornit autora, že na jeho článek bylo reagováno, odkud, kým a jak. Zkoumal jsem TB trochu důkladněji, protože jsem jeho podporu přidával vlastnímu blogu a tak popíšu, jak to všechno funguje.

Přijímání TB

Pro přijetí TB vytvoříme soubor, který pak u článků uvádíme jako Trackback URL. V adrese odkazu TB URL by měla být definována proměnná, která pak umožní zjistit, ke kterému blogpostu poslaný TB patří. Já volil variantu $id, tedy id postu v databázi.

Trackback ping je posílán metodou POST a posílá čtyři zásadní proměnné:

Po načtení skriptu je záhodno ověřit, zda se vůbec jedná o Trackback. Není-li tomu tak, přesměrujeme na permalink příspěvku, nebo zobrazíme chybovou hlášku, následující příklad dělá první možnost:

if (empty($_POST["tb_url"]) && empty($_POST["title"]) && empty($_POST["excerpt"])){
    header('Location: http://www.example.com/item/item_permalink');
    exit;

Projde-li načtení stránky skutečně jako TB ping, následuje další vlna ověřování. Je fajn omezit posílání na jeden TB pro jedno URL, aby se Trackbacky pro jeden příspěvek neopakovaly. Podle výsledku této podmínky vypíšeme výstup. Ten MUSÍ být v Content-Type: text/xml; a má danou formu. Nejjednodušší je, definovat si funkci, která se pak volá (inspiraoval jsem se wordpressem):

function trackback_response($error = 0, $error_message = '') {
        header('Content-Type: text/xml; charset=UTF-8' );
        if ($error) {
                echo '<?xml version="1.0" encoding="utf-8"?'.">\n";
                echo "<response>\n";
                echo "<error>1</error>\n";
                echo "<message>$error_message</message>\n";
                echo "</response>";
                die();
        } else {
                echo '<?xml version="1.0" encoding="utf-8"?'.">\n";
                echo "<response>\n";
                echo "<error>0</error>\n";
                echo "</response>";
        }
}

Parametry funkci nastavíme podle toho, v jaké části ověřovacího řetězce ji voláme – v chybové s $error = 0, ve „všechno-v-pořádkové“ s $error = 1 a stanovenou $error_message. Ve „všechno-v-pořádkové“ části pak také dál TB zpracujeme: vložení do databáze, poslání upozorňovacího e-mailu…

Posílání TB

Posílání popisuje následující kus kódu:

$query_string = "title=$title&url=$url&blog_name=$blog_name&excerpt=$excerpt";

$http_request  = 'POST http://www.example.com/trackback.php?id=666'." HTTP/1.0\r\n";
$http_request .= 'Host: www.example.com'."\r\n";
$http_request .= 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8'."\r\n";

$http_request .= 'Content-Length: '.strlen($query_string)."\r\n";
$http_request .= "User-Agent: User Agent X.x";
$http_request .= "\r\n\r\n";

$http_request .= $query_string;
if ( '' == $trackback_url['port'] )
        $trackback_url['port'] = 80;

$fs = fsockopen("www.example.com", "80", $errno, $errstr, 4);
fputs($fs, $http_request);

Proměnná $query_string určuje POST proměnné poslané skriptu, který TB zpracovává. za $ proměnné se samozřejmě dosazují hodnoty dané pro reagující příspěvek. Celý ping musí být poslán s Content-Type: application/x-www-form-urlencoded, User-Agent si vyplňte dle svého. Místo www.example.com se samozřejmě definuje host cílové adresy.

4. 5. 2005, 17.26 - Computer$

Komentáře

RSS feed komentářů k tomuto článku

1.Andrew » 6. 5. 2005 23.18 » Reagovat

Hele, Matěji, píšeš, že u parametry title a url jsou povinné, ale v příkladu testuješ title , url ne a jako bonus ještě ty dva nepovinné. Zvláštní, ne?


2.Finwe » 9. 5. 2005 14.53 » Reagovat

Podle specifikace jsou ty dva povinné. Co si kdo bude testovat skriptem je jeho věc. A jinak je to fajn postřeh, dik.


3.Andrew » 9. 5. 2005 17.57 » Reagovat

Njn, znáš mě - rejpal. :-)


Reagujte!
Jméno e-mail (nezobrazí se)
web 3 plus 2 je

Jak komentovat?

  • Tady formátuje Texy! Co a jak se dozvíte v dokumentaci syntaxe
  • příklad: *kurzíva* **tučně** "text odkazu":http://finwe.info
  • Na nový odstavec jsou potřeba DVA entery!