TrackBack技术规范
原文是TrackBack Technical Specification,此处是译文。
TrackBack 技术规范
- 名称
- 作者
- 版本
- 描述
- 发送一个TrackBack Ping
- 取回TrackBack Pings
- TrackBack Ping URLs的自动发现
- 例子
- 变动
- 1.1 (2002年10月10日)
- 1.0 (2002年8月28日)
- 致谢
名称
mttrackback - TrackBack 技术规范
作者
Benjamin and Mena Trott, movabletype.org
版本
1.1
描述
本文描述了TrackBack, 一个点对点通信和网站间互相通告的框架. TrackBack的中心思想是TrackBack ping的概念, 从本质上讲,TrackBack ping是一个请求,通告“资源A与资源B相关,或有链接到资源B.” 一个TrackBack “资源” 用一个TrackBack Ping URL表示, 这是一个标准的URI.
利用TrackBack,站点间可以互相通告相关的资源. 例如,如果博客(weblogger)甲希望通知博客乙他写了一些有趣的/相关的/骇人听闻的文字,甲发送一个TrackBack ping给乙。这完成了两件事:
- 乙能自动列出那些引用他的某篇文章的网站,到他网站的访问者能读到网络上所有与此文相关的文章,包括甲的文章。
-
ping在他的文章和你的文章间提供了一种稳固的、直接的链接,而不是那种依赖于外部行为(某人点击那个连接)的非直接连接(如反向连接referrer)。
发送一个TrackBack Ping
TrackBack使用REST(Representational State Transfer,http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm)模式工作, 请求通过标准的HTTP调用传送。要发送一个TrackBack ping, 客户端向服务器端发送一个标准的HTTP请求,然后接收一个简单XML格式的应答(详见下述).
在TrackBack系统中,接收TrackBack pings的URL叫TrackBack Ping URL.一个典型的TrackBack Ping URL如http://www.foo.com/mt-tb.cgi/5, 其中5
是TrackBack ID. 服务器端可以用任何有意义的格式来定义TrackBack Ping URL;客户端不应该只限于特定的格式.
为了发送一个ping, 客户端发送一个POST格式的HTTP请求到TrackBack Ping URL. 请求的内容的content type应是application/x-www-form-urlencoded
. 例如, 到http://www.foo.com/mt-tb.cgi/5 的ping请求可能看起来象:
POST http://www.foo.com/mt-tb.cgi/5Content-Type: application/x-www-form-urlencodedtitle=Foo+Bar&url=http://www.bar.com/&excerpt=My+Excerpt&blog_name=Foo
注意: 在旧版本的TrackBack规范中,ping是用GET格式的HTTP请求发送的. 这种方式将不再支持; 2003年1月发布的Movable Type系统将会去掉对GET方式的支持。.
可能的参数包括:
- title
文章的标题
- excerpt
文章的摘要. 在Movable Type系统中, 如果摘录信息超过255个字符将会被截断为252个字符, 并在后面增加 ...
三个字符.
- url
文章的永久连接. 象其它永久连接一样,这个连接应可能准确地在页面中定位文章的入口,因有疑问时这个链接会用到。
- blog_name
发表文章的blog的名称。
在Movable Type系统中, 在上述的参数中只有 url 是必须的. 如果 title 没有提供,, url 的值将被用作标题.
对上述请求的应答信息,以XML格式编排,从而能实现应用层的错误检查。(HTTP层的错误将会这样返回--例如,如果TrackBack URL 所指的资源在服务器上已经不存在,状态码404
将会返回).
一个成功的ping将会返如下应答:
0
一个失败的ping将会返如下应答:
1The error message
当然,应用程序应该允许将来根据需要增加字段,但应答的 XML 结构保持不变.
取回TrackBack Pings
要取回某个特定TrackBack Ping URL收到的ping,向它发一个GET格式的HTTP请求,请求字符串(query string)是 ?__mode=rss. 在规范的将来修订中,--一旦从POST转换到GET的过渡期结束--这将非常简单,向TrackBack Ping URL发送一个GET请求,将返回一列ping.
一个GET请求样例如下::
GET http://192.168.1.103/mt/mt-tb.cgi/3?__mode=rss
对此请求的应答,要么返回如上所述的错误信息,要么返回一列用RSS规范格式标志的TrackBack pings, 整个应答内容的覆巢无根元素是
.
例如:
0
/>http://this.is/the/trackback/item/link/Description of the TrackBack itemen-us
/>http://this.is/the/permalink/Excerpt
在标签
和
之间的部分,都是真实的RSS数据; 剩余的部分都是应答内容的包装,处理时可以忽略.
TrackBack Ping URLs的自动发现
TrackBack客户端需要一种方法,来确实一个特定的URL或blog文章的TrackBack Ping URL. 服务器在生成页面时应内嵌RDF; RDF 描述关于该文章的元数据,允许客户端自动发现TrackBack Ping URL.
RDF样例如下::
注意: 由目前的检查器将嵌入XHTML页面的RDF信息视为不合规范,要通过检查需要将上述的RDF信息用注释符括起来:
这不是一个完美的解决方案,但是作为一个临时的应对措施它可正常工作.
其中的dc: 元素是标准的Dublin Core 元素; trackback:ping元素来自RSS 1.0/2.0的TrackBack模块,参见http://madskills.com/public/xml/rss/module/trackback/.
给定一个URL my_url, 客户按下列步聚来寻找TrackBack Ping URL:
- 发送GET格式的HTTP请求,取回 my_url对应的页面的内容.
- 扫描页面内容,查找内嵌的RDF. 页面中可能嵌有多处RDF--客户端要找到 dc:identifier等于my_url的那块RDF信息.
- 从RDF块中抽取trackback:ping值,这就是TrackBack Ping URL.
客户端一旦确实了TrackBack Ping URL, 它就可以发送TrackBack ping了 (参见 发送 TrackBack Ping).
自动发现的代码样例参见 例子.
例子
TrackBack实现样例
为帮助那些有远见的开发人员在他们的系统中实现 TrackBack , 我们发布了一个TrackBack的独立的实现,它不依赖于Movable Type系统. 它可接收通过HTTP请求发送来的ping, 将ping存放在本地的文件系统中, 且可以返回某个特定TrackBack项(文章)的一列RDF格式的ping. 如果你要求,它还可以静态地产生 RSS文件. 例如,要将最近的15个ping列在工具条,这项功能就会泒上用场。
这个独立的TrackBack实现可从http://www.movabletype.org/downloads/tb-standalone.tar.gz下载.
它的发行遵循 Artistic License. Artistic License条款的描述在 http://www.perl.com/language/misc/Artistic.html.
它的安装和使用指令说明在http://www.movabletype.org/docs/tb-standalone.html.
自动发现的代码样例
use LWP::UserAgent;sub discover_tb { my $url = shift; my $ua = LWP::UserAgent->new; $ua->agent('TrackBack/1.0'); $ua->parse_head(0); ## So we don't need HTML::HeadParser $ua->timeout(15); ## 1. Send a GET request to retrieve the page contents. my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); return unless $res->is_success; ## 2. Scan te page contents for embedded RDF. my $c = $res->content; (my $url_no_anchor = $url) =~ s/#.*$//; my $item; while ($c =~ m!()!sg) { my $rdf = $1; my($perm_url) = $rdf =~ m!dc:identifier="([^"]+)"!; next unless $perm_url eq $url || $perm_url eq $url_no_anchor; ## 3. Extract the trackback:ping value from the RDF. ## We look for 'trackback:ping', but fall back to 'about' if ($rdf =~ m!trackback:ping="([^"]+)"!) { return $1; } elsif ($rdf =~ m!about="([^"]+)"!) { return $1; } }}
这段Perl定义了一个过程 discover_tb. 给定一个 URL, 它会试图找到与此URL相对应的TrackBack Ping URL. 如果找到了,它会返回 TrackBack Ping URL; 否则返回 undef
.
变动
1.1 (2002年10月10日)
- 在此版本中,TrackBack pings 的发送用 POST 格式的HTTP请求代替 GET格式的请求.旧版本的GET方式将不在支持,MT中从2003年1月起也不再提供对GET方式的支持。
- 在RDF中,现在TrackBack Ping URL应在trackback:ping 元素中保存, 而不是原先的 rdf:about元素.
- 修改了 TrackBack Ping URL的样例的格式,用 PATH_INFO 代替了请求串(query string).
- 内嵌的供自动发现使用的RDF不再导致页面检查时出错。
- 增加了自动发现的样例代码.
1.0 (2002年8月28日)
规范首次发布.
致谢
感谢Paul Prescod和其他朋友,他们的指导让TrackBack更符合REST.
Copyright © 2001, 2002 Ben Trott and Mena Trott. All Rights Reserved.
Posted by Hilton at November 7, 2003 11:28 AM
TrackBack新手指南(编译)
TrackBack ping:在这种情况下,一个ping就是一条从一个web服务器发送到另一个服务器的短消息(a small message)。
“A Beginner's Guide to TrackBack”一文,对在MT中如何使用TrackBack做了详细地说明,下面就是学习笔记。
什么是TrackBack?
简单说来,TrackBack被设计用来提供一种方法以实现网站之间的互相通告:它是一种方法,能让甲对乙说(甲、乙指两个人,下同),“这篇文章可能是你感兴趣的”。要实现这个动作,甲向乙发送一个TrackBack ping即可。
TrackBack ping:在这种情况下,一个ping就是一条从一个web服务器发送到另一个服务器的短消息(a small message)。
历史
TrackBack在2002年秋第一次以开放规范的形式发布。MT2.2作为一种协议和一项功能对其进行了实现,这是TrackBack的第一个实现。由于只有众多的站点都支持TrackBack,它的真正价值才能得以体现,所以TrackBack从一开始就被设计为一个开放系统:一个其它的blog工具能很简单地实现的开放系统。
截止目前,已有下列工具支持TrackBack:
- Movable Type
- Bloxsom
- Blojsom
- Nucleus
- B2
- Radio
- TrackBack standalone Tool
如何使用TrackBack
TrackBack的使用依赖于具体的blog/trackback工具。下面主要针对MT的TrackBack使用。
小书签(bookmarklet)
在MT中使用TrackBack的最简单的方法,是借助小书签,它利用其自动发现功能可以从你正在阅读的当前页面中找到一组可进行TrackBack的文章链接。(自动发现意味着你无需做任何相关的工作,因为系统会替你完成)。如果你还没有在MT中设置过小书签,则:
- 登录MT
- 点击“设置小书签”(Set Up Bookmarklets)
- 配置小书签的显示
注意:一定要确保选中了”TrackBack items”选项,因为这是神奇的自动发现功能的开关。
通过点击下列选项前的框,来选择你想在小书签中显示的内容。然后点击“创建”(create)。
- 安装小书签
将“Post to MT Weblog”链接用鼠标拖到”链接”工具栏(或是者收藏夹里中),它的标题就是“Post to MT Weblog”。(对IE用户来说,还可以把一个”MT It!”加入右键菜单,对当前的页面点击右键时选中此菜单项,也能实现小书签的功能).
在MT的某些汉化版本中,需要将$MTHOME/lib/MT/L10N/zh_cn.pm做如下修改:
'Post to MT Weblog' => '',
改为
'Post to MT Weblog' => 'Post to MT Weblog',
,否则看不到这个链接。
当你阅读其它blog上感兴趣的文章时,点击“Post to MT Weblog”, 如果当前页面中可以TrackBack的文章,它的标题将会自动加入到一个下拉列表中供选择来ping(如果只有一个满足要求的文章,则会用checkbox选项代替的下拉列表)。页面上显示其它元素,都是你在前面配置时选中的。如果那时所有项都选择了,则页面跟正常的”新增文章”非常相似。相关的项都输入完后,点击“保存”(post),则在重建立文章以后,系统会自动ping你从下拉列表中选中的那篇文章。
这儿有一个操作
演示录像(9M大小),是mov格式,需要apple的QuickTime播放器播放。
通过文章编辑表单来TrackBack ping
如果你不想用小书签,仍可以在MT中使用TrackBack ping功能,只是不是那么简单而已。这时,需要找到被ping的目标文章的TrackBack Ping URL。下面描述一下如何一步步的操作。注意:TrackBack Ping Url不是文章的永久链接,而是另外一个链接。
- 找到你感兴趣的文章
这是你的评论对象,也将是你的文章发送TrackBack Ping到的目标对象。如果这个目标文章,接收“TrackBack Ping”,则会自动显示一个”TrackBack”链接,紧挨着“Comments”链接。
- 找到TrackBack Ping Url
点击上述”TrackBack”链接,页面上会显示此文章的”TrackBack Ping URL”,接下来是一些收到的“TrackBack ping”。复制这个”TrackBack Ping URL”。
- 登录到你的MT
- 选择一个BLOG
- 点击”新增文章“(New Entry)
- 将刚才复制的内容粘贴到“Urls to ping”输入框中。
如果看不到这个输入框,则点击右下角的”Customize the display of this page “链接来修改你的编辑页面显示。
- 编辑文章内容,点击保存按钮
当文章被创建以后,接着显示”Ping...”窗口。此时,MT自动发送”TrackBack Ping”去通知目标文件。
利用”自动发现“功能来发送”TrackBack Ping”
在MT中,最后一种使用”TrackBack Ping”的方法,是在你的blog设置中打开“自动发现(TrackBack auto-discovery,也有人译为自动挖掘)”选项。
当此选项打开后,MT利用自动发现在功能分析你的文章中的链接所对应的页面,是否接收“TrackBack Ping”,如果接收,则自动从你的文章发送一个”TrackBack Ping”到那个页面。此时,你不需要在”Urls to Ping”输入框中输入内容,也不需要用小书签来查找可ping的链接。
协议
TrackBack是一个基于REST的点对点(peer-to-peer)通信和网站间通告的架构。协议基于”推送(Push)”的原理,而不是“拉取(pull)”:如果你想和其它站点分享信息,你要初始化连接,而不是等待其它站点发现你(和你的信息)。借助TrackBack,站点可以交流相关资源。例如,如果甲想通知乙他写了一些有意思的/想关的/震撼性的东东,甲发送一个TrackBack ping给乙。这完成了两件事:
- 乙能自动列出那些引用他的某篇文章的网站,到他网站的访问者能读到网络上所有相关的文章,包括甲的文章。网页机器人也能访问这些信息,从而能得站点间的联系图。
- ping在他的文章和你的文章间提供了一种稳固的、直接的链接,而不是那种依赖于外部行为(某人点击那个连接)的非直接连接(如反向连接referrer)。
TrackBack协议对任何blog工具都是开放的,具体规范参见
http://www.movabletype.org/docs/mttrackback.html, 或
我的翻译.
目前的应用
远程评论
目前,TrackBack主要被用作一个远程评论系统:如果我在我的blog上发表了一篇文章来评价你在你的blog上的文章,我的blog工具会通报给你的blog工具以通知你此事。接着你的blog将显示我的文章的摘录部分,并提供了一个回到我的文章的链接。这使那些到你的网站的访问者知道其他人是如何评价你的文章的--换句话说,就是评论(comment)一样,只是这评论是在我的网站而不是在你的网站上,而在以前我只是在你的文章后留言评论。这让我能控制我的文章。如果我想修改一个打字错误,或者改变一些措词,于是我就可以做到。如果我在你的站点上留言,我没有权限来修改那些文字。换句话说,TrackBack使你更能控制你的内容。
TrackBack ping的威力,在于它创建了你我站间的一个直接引用。这个引用可以用来建立一个分布式的交谈(conversation)。例如,另外一个blogger(女)发布文章阐述了对我的文章的想法,并发送给我一个TrackBack ping.这个交谈(conversation)可从你最初的文章,追踪到我这儿,再到她那儿。这个线路可以通过TrackBack的元数据自动画出来。请看这个线路:
http://www.sixapart.com/safari-thread.html,它开始的文章是
http://www.sixapart.com/log/2003/01/initial_reactio.shtml.
内容聚合
虽然到目前TrackBack最流行的应用,是以远程评论的形式,一个更令人兴奋的使用已经开始出现了:利用TrackBack来将相关的内容聚合到一个基于主题的仓库(repository)中。这其实是TrackBack最初的设计用途:远程评论来源于一个主题仓库的特殊,即此时的“主题”是一篇blog文章。
内容聚合站点收集关于某个主题的内容。如果你曾试图查找关于某个特定题目的blog文章,这非常不可能,除非是新闻故事或新近发生的事。如果你的题目是关于80年代的音乐,你要花费更多艰苦的时间来找到所有的关于那个主题的blog文章。这到了TrackBack显示身手的时候:通过建立一个关于80年代音乐的文章仓库,其它的内容作者可以利用TrackBack自动ping这个仓库。任何查找关于80年代音乐的文章的人,可到这个页面,找到那些指向这个站点的文章。
这些内容仓库可以集中存放(如Internet Topic Exchange),也可以分布式存放。以MT为例,你可以设置任何blog分类来接收TrackBack ping,这使你成为你感兴趣的某个主题的信息源。
- 登录MT
- 选择blog,用以存放允许TrackBack的分类
- 点击“分类(categories)”
- 编辑类别属性
点击某类别的“编辑类别属性(edit category attribute)”连接
- 设置接收TrackBack ping 为on.
- 在模板中增加显示收到的ping的代码
在这个例子中,TrackBack字符串是一个分类的名字,实际应用中以真实的分类名替换它。
- 公开发布分类的TrackBack URL
是为了让更多的人向这个类另发送ping.这个URL你可以从类编辑页面得到。
一些以这种方式使用TrackBack的站点:
- Austin Bloggers
- SXSWTrack
- BlogPopuli
将来可能的应用
内容控制
随着时间的流失,你在你的blog上的花费的时间越来越多,你的blog的内容也越来越充实,你可能想控制所有你在其它的blog或系统中发布的内容。例如,如果你曾就某人的文章在其站点上发布过自己的想法,他想将这些想法发布到自己的blog中来,于是你可就可控制它们了。或者,如果你在amazon.com上发表过评述(review),你可能想把这个评述组织到你的自己的站点中来。TrackBack有助于做到这些。有个例子,Matt Haughey的Posted Elsewhere工具条(http://a.wholelottanothing.org/),将他在别外写的内容聚合起来。
反过来,TrackBack可以工作:不是在别人的站点上发表文章,而是作者在自己的blog上发表文章,然后将TrackBack ping发往其它站点。例如,如果amazon.com评述可以接收TrackBack ping,你可信息控制在自己的网站上,让amazon.com连到你这儿。
我的一点想法
一个页面,要想提高自己在google的pagerank值,关键在于能得到来自高pagerank值的页面的链接。一般说来,这种连接的建立,低值的页面只能被动的接收,而blog工具中的comments和trackback,提供了一种在别人的页面上主动建立连接的方法。如果google没有针对这种情况调整算法,这将成为一种快速提升pagerank的途径。尤其是“自动发现”功能,能自动找出链接,检查相关的页面是否接收trackback ping,将会更加剧对这种手段的利用。
真的是这样的吗?
参考资料
A Beginner's Guide to TrackBack
http://www.movabletype.org/trackback/beginners/
Posted by Hilton at November 6, 2003 04:49 PM