也许你也看过所谓的 官方规范 和及其 翻译,也许你还是像我一样:还是看不明白。呼呼~
通俗点说:你在 A 的 Blog 发现一个感兴趣的话题,并因此有感而在自己的 Blog 发表了一个新主题,而且在无须多做其他工作的情况下,你想让 A 知道。那么,你只要在发表新主题时,填上 A 的那个话题的对应 Trackback 地址,即可,没错,这就是一个 Trackback 的过程。
接着从技术层面来说,要想实现这个过程,你要让 A 的 Blog 能接受你的日志的“标题”及“摘要”,当然更重要的还有你的“地址”。一般,需要类似以下的函数来实现:
Function TrackBack(TrackURL, url, title, excerpt, blog_name)
Dim PostDate, ObjXMLHTTP, ObjDom
title = CutStr(Server.URLEncode(title),100)
excerpt = Server.URLEncode(CutStr(excerpt, 252))
url = Server.URLEncode(url)
blog_name = CutStr(Server.URLEncode(blog_name),100)
PostDate = "title="&title&"&url="&url&"&blog_name="&blog_name&"&excerpt="&excerpt
Set ObjXMLHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP")
Set ObjDom = Server.CreateObject("Microsoft.XMLDOM")
ObjXMLHTTP.Open "POST", TrackURL, false
ObjXMLHTTP.setRequestHeader "Content-Type","application/x-www-Form-urlencoded"
On Error Resume Next
ObjXMLHTTP.Send PostDate
If ObjXMLHTTP.readyState 4 Then ObjXMLHTTP.waitForResponse 15
If Err.Number 0 Then
TrackBack = "Trackback: Connection Failure."
Else
If (ObjXMLHTTP.readyState 4) Or (ObjXMLHTTP.Status 200) Then
ObjXMLHTTP.Abort
TrackBack = "Trackback: No Response."
Else
ObjDom.async=false
ObjDom.loadXML(objXMLHTTP.responseText)
If ObjDom.parseError.errorCode 0 Then
TrackBack = "Trackback: Response Error Parse."
Else
If ObjDom.getElementsByTagName("error")(0).Text="0" Then
TrackBack = "Trackback Succeed!"
Else
TrackBack = "Trackback Failure: "&ObjDom.getElementsByTagName("message")(0).Text
End If
End If
End If
End If
Set ObjXMLHTTP = Nothing
Set ObjDom = Nothing
End Function
其实就是利用 XMLHTTP 组件,向对方 Post 自己 Blog 的“标题”和“摘要”和“地址”(实际上就是远程向对方提交数据)。
那对方又是如何辨别我方发送过去的数据呢!?这就需要规范了:
- title - 文章的标题
- excerpt - 文章的摘要。在Movable Type系统中,如果摘录信息超过255个字符将会被截断为252个字符,并在后面增加...三个字符
- url - 文章的永久连接。象其它永久连接一样,这个连接应可能准确地在页面中定位文章的入口,因有疑问时这个链接会用到
- blog_name - 发表文章的blog的名称
那又是如何知道对方是否已经正确应答了呢!?这也涉及到规范,一般返回的应答文件为 XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>0</error>
</response>
如果错误,则返回格式及内容类似:
<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<error>1</error>
<message>The error message</message>
</response>
这样,就完成了 Track Ping 和 Track Back 的过程。
至于站在接收方来实现的话,就只要简单判断接受的数据是否齐全或格式是否正确,正确则保存数据(其实就好像对该日志发表了一篇评论),否则在应答 XML 中返回 Error=1 错误。
不过,如果编辑了自己的 Blog,提交更新之后是否还需要再次发送 Track Ping!?对方的 Blog 是否也可以同步更新!?目前我还没弄明白,毕竟这整个思路是我靠逐行看完别人的代码实现过程才弄明白的。
不过如果要这样实现倒也不难,对方只要在应答 XML 中返回一个 Trackback 纪录的 ID 就可以实现了。但目前似乎没有这样的规范。这也是后话了。