zoukankan      html  css  js  c++  java
  • 如何在 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 就可以实现了。但目前似乎没有这样的规范。这也是后话了。

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    ASP.NET的底层体系1
    MVC路由解析---IgnoreRoute
    HTTP协议详解(三)
    HTTP协议详解(二)
    HTTP协议详解(一)
    优化MySQL服务器
    知识管理系列---3.程序实现
    Linux上PHP加入环境变量
    php-fpm 服务
    centos 服务器编译安装apache+php
  • 原文地址:https://www.cnblogs.com/Athrun/p/1456394.html
Copyright © 2011-2022 走看看