如何在 ASP 中实现 Trackback

也许你也看过所谓的 官方规范 和及其 翻译,也许你还是像我一样:还是看不明白。呼呼~

通俗点说:你在 ABlog 发现一个感兴趣的话题,并因此有感而在自己的 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 PingTrack Back 的过程。

至于站在接收方来实现的话,就只要简单判断接受的数据是否齐全或格式是否正确,正确则保存数据(其实就好像对该日志发表了一篇评论),否则在应答 XML 中返回 Error=1 错误。

不过,如果编辑了自己的 Blog,提交更新之后是否还需要再次发送 Track Ping!?对方的 Blog 是否也可以同步更新!?目前我还没弄明白,毕竟这整个思路是我靠逐行看完别人的代码实现过程才弄明白的。

不过如果要这样实现倒也不难,对方只要在应答 XML 中返回一个 Trackback 纪录的 ID 就可以实现了。但目前似乎没有这样的规范。这也是后话了。

posted @ 2009-05-14 00:33  Athrun  阅读(296)  评论(0编辑  收藏  举报