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í <acronym title=„Trackbac­k“>TB</acronym>

Pro přijetí <acronym title=„Trackbac­k“>TB</acronym> 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ý <acronym title=„Trackbac­k“>TB</acronym> 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_ur­l“]) && empty($_POST[„ti­tle“]) && empty($_POST[„ex­cerpt“])){ header(‚Location: http://www.example.com/…em_permalink); exit;

Projde-li načtení stránky skutečně jako <acronym title=„Trackbac­k“>TB</acronym> ping, následuje další vlna ověřování. Je fajn omezit posílání na jeden <acronym title=„Trackbac­k“>TB</acronym> pro jedno <acronym title=„Uniform Resource Locator“>URL</a­cronym>, 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_res­ponse($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_mes­sage</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 <acronym title=„Trackbac­k“>TB</acronym> zpracujeme: vložení do databáze, poslání upozorňovacího e-mailu…

Posílání <acronym title=„Trackbac­k“>TB</acronym>

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

$query_string = „title=$title&ur­l=$url&blog_na­me=$blog_name&ex­cerpt=$excerpt;$http_request = ‚POST http://www.example.com/trackback.php?…." 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($que­ry_string).„\r\n“; $http_request .= „User-Agent: User Agent X.x“; $http_request .= „\r\n\r\n“;$http_request .= $query_string; if ( '' == $trackback_ur­l[‚port‘] )
$trackback_ur­l[‚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.

Computer$

Komentáře

Andrew

6. 5. 2005, 23.18

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?


Finwe

9. 5. 2005, 14.53

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


Andrew

9. 5. 2005, 17.57

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


Vložit komentář

K tomuto příspěvku není povoleno přidávat komentáře.