Mirin webspace

Nejbohatší život má ten, kdo žije s minimem nároků

19. 2. 2008 - Komentáře (7) Ostatní

Co je trackback

Jak jste si možná všimli, implementoval jsem na tomto blogu funkci trackback. Pod každým článkem je nyní link pro trackback url. V tomto a několika dalších článcích popíšu co to vlastně trackback je, jak funguje a jak jsem jeho podporu přidal do aplikace založené na Zend Frameworku. Pár zmínek o trackbacku na českém internetu je, ale není to úplně dostatečné, tak snad se mi to podaří napravit.

Trackback je metoda, jak autor nějakého příspěvku na svém blogu informuje autora jiného příspěvku, že o něm píše. Uf, lepší je příklad :-).

Jarda večer napíše na blog, že se dozvěděl o invazi mandelinek na jižní Moravě a že to vypadá, že máme po bramborách. Ráno si to zemědělský analytik Pepa přečte, a ověří si, že mandelinky se utopily v septiku někde pod Brnem. Tak to Pepa blogne a zároveň pošle trackback Jardovi o tom, že je to OK. Jardovi se trackback od Pepi objeví pravděpodobně jako komentář pod původním příspěvkem o mandelinkách. Protože Jarda i Pepa blogují ve wordpressu, tak si jen přečetli třeba tohle, párkrát klikli v administraci wordpressu a hotovo.

Protože mi si píšeme vlastní blog, tak nás ale zajímá, jak si to napsat sami a co za tím stojí. Trackback vymysleli lidičky ze spolku Six_Apart, někdy okolo roku 2002 jako součást jejich blogovacího softwaru Movable_Type, mimochodem napsaného v Perlu. Napsali i specifikaci a asi se i pokoušeli udělat z trackbacku IETF draft, ale zatím to asi nedopadlo. Trackback podporuje spousty blogovacího softwaru, ale jsou i poměrně rozsáhle blogovací systémy (jako např. www.blogger.com), které ho nepodporují.

Poslání trackbacku

Princip poslání trackbacku je jednoduchý. Klient otevře normální http spojení na server, kterému chce trackback poslat a metodou POST mu pošle data, jako by šlo o data z nějakého formuláře. Např. Takto.

  POST http://www.jardablog.com/trackback/5
  Content-Type: application/x-www-form-urlencoded; charset=utf-8

  title=Mandelinky+vytuhly&url=http://www.pepablog.com/mandelinky-vytuhly&excerpt=Tak+už+je+to+ok+mandelinky
  +vytuhly&blog_name=Pepa+Blog

O trackback URL a jakým způsobem ho získat se zmíním později.

Parametry v POSTu jsou následující

  • title - titulek našeho příspěvku - nepovinný
  • excerpt - pár slov z našeho příspěvku - nepovinný
  • url - url našeho příspěvku, měl by to být Permalink, aby se na něj dalo v komentáři odkázat. povinný
  • blog_name - název našeho blogu - nepovinný

Pokud uvažujeme výše uvedený případ, tak se naše = Pepovo. Doporučuje se používat charset v poli Content-Type a data v POSTu mít pak v tomto kódování.

Odpověď na trackback

Pokud je na serveru všechno OK, server musí odpovědět na trackback tímto XML.

  <?xml version="1.0" encoding="utf-8"?>
    <response>
    <error>0</error>
    </response>

pokud se server z nějakého důvodu rozhodne, že s trackbackem není něco v pořádku, měl by odpovědět takto:

<?xml version="1.0" encoding="utf-8"?>
 <response>
  <error>1</error>
  <message>The error message</message>
 </response>

V message by měla být informace o tom, co se stalo. Posílání trackbacku se také často říká ping a url trackback trackback ping url.

Získání trackback url

Pro klienta je nutné nějakým způsobem získat trackback URL. Nejčastější možností je publikovat url někde pod článkem. Ten, kdo chce provést trackback si ho zkopíruje někam do příslušného textového pole formuláře pro zadání příspěvku na blog.

Další možností je autodiscovery - vše se zařídí samo. Server s originálním článkem dává prostřednictvím RDF k dispozici metadata o článku. Může to vypadat nějak takto.

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
           xmlns:dc="http://purl.org/dc/elements/1.1/"
           xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <rdf:Description
      rdf:about="http://www.foo.com/archive.html#foo"
      dc:identifier="http://www.foo.com/archive.html#foo"
      dc:title="Foo Bar"
      trackback:ping="http://www.foo.com/tb.cgi/5" />
 </rdf:RDF>

Do HTML se RDF dost často kvůli validátorům začleňuje prostřednictvím HTML komentářů.

<!--
  <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  ...
  </rdf:RDF>
  -->

Klient si pak ve stránce musí najít RDF s dc:identifier které odpovídá URL právě čteného článku a v něm pak najde trackback::ping, které obsahuje url pro trackback, na něj se pak trackback pošle. Je pak možné implementovat třeba to, že se z našeho nového příspěvku na blogu vyberou všechna URL, najde se jejich trackback url pokud existují a pošle se na ně trackback o našem novém článku.

Spam

Jak s přijatým trackbackem naložíme, je na nás. Většinou se uloží jako komentář někam pod článek. Samozřejmě se toho pak dá velmi lehce zneužít pro spam. Kdokoli vám může poslat cokoli. Proto to chce nějakou ochranu. Často se používá se používá služby akismet (v Zend Frameworku je pro ní i service API). Já jsem jednak zakázal více trackbacků se stejným url a pak jsem použil techniku popsanou zde. Jde o to, že po přijmutí trackbacku se pokusíme na url, ze kterého trackback přišel najít odkaz na článek, který je trackbackován. Pokud tam je, tak je trackback v pořádku, pokud ne, je to spam.

Příště se zmíním trochu o implementaci.


Komentáře (7)

  1. ivan - 12. 6. 2008 11:53

    pouzivam sluzbu akismet uz nejaky ten patek a slovo spam nepoznam. jen cas od casu 'vysypu kos' :-)

  2. gsdfg - 17. 9. 2008 17:15

    ty nepouzivas captchu?

  3. koubel - 17. 9. 2008 21:48

    ne, alespoň zatím.

  4. Honza - 25. 2. 2010 09:52

    Akismet je dostačující, nestalo se mi, že by nějaký spam pronikl, je fakt dobrej. Jsem s ním moc spokojenej.

  5. xchaos - 9. 1. 2012 13:46

    Vypadá to rozhodně zajímavě a nebráním se tomu, že bych to použil.

  6. Dobrý článek - 17. 3. 2013 13:41

    zajímala mě přesná komunikace a toto je nejlepší článek o trackback, co jsem našel, díky :D jinak trackbacky si vybírám a kvůli spamu schvaluji ručně.

Komentáře jsou uzavřeny.