4. 5. 2005, 17.26
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.
Pro přijetí <acronym title=„Trackback“>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=„Trackback“>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_url“]) && empty($_POST[„title“]) && empty($_POST[„excerpt“])){ header(‚Location: http://www.example.com/…em_permalink‘); exit;
Projde-li načtení stránky skutečně jako <acronym title=„Trackback“>TB</acronym> ping, následuje další vlna ověřování. Je fajn omezit posílání na jeden <acronym title=„Trackback“>TB</acronym> pro jedno <acronym title=„Uniform Resource Locator“>URL</acronym>, 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 <acronym title=„Trackback“>TB</acronym> zpracujeme:
vložení do databáze, poslání upozorňovacího e-mailu…
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?…‘." 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.
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.