(转)Trackback的完整实现

  Trackback的完整实现至少包含两个方面,其一:客户端发送Trackback Ping;其二:服务器端接收和处理Trackback Ping,并向客户端返回处理结果。然后,根据需要我们可以考虑在客户端接收或者不接收,处理或者不处理返回的信息。下面是用ASP实现的具体代码:

<%
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'#函数名:Trackback
'#作 用:向指定的URL发送Trackback Ping,并根据服务器端返回的信息,提示用户处理情况。
'#参 数:
'#RemoteURL = 目标URL,也即所引用的blog所提供的引用地址
'#MyBlogURL = 我的Blog的URL
'#MyBlogName = 我的blog站点名称
'#MyBlogTitle = 当前这篇blog的标题
'#MyBlogExcerpt = 当前这篇blog的摘要
'#返回结果:字符串,以“|”分隔,第一部分为数字,0表示成功,1表示有错;第二部分是具体信息。

Function Trackback(RemoteURL,MyBlogURL,MyBlogName,MyBlogTitle,MyBlogExcerpt)
    Dim objXMLHttp,objXML,intStat,strMessage,strPostInfo

    '对参数进行必要的处理,比如URLEncode之类
    MyBlogURL = Server.URLEncode(MyBlogURL)
    MyBlogName = Server.URLEncode(MyBlogName)
    MyBlogTitle = Server.URLEncode(MyBlogTitle)
    MyBlogExcerpt = Server.URLEncode(MyBlogExcerpt)

    '构造要发送的请求内容
    strPostInfo = "title=" & MyBlogTitle
    strPostInfo = strPostInfo & "&url=" & MyBlogURL
    strPostInfo = strPostInfo & "&excerpt=" & MyBlogExcerpt
    strPostInfo = strPostInfo & "&blog_name=" & MyBlogName

    '创建对象
    Set objXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    Set objXML = Server.CreateObject("Microsoft.XMLDOM")

    '以post方式打开XMLHTTP对象
    objXMLHttp.Open "POST", RemoteURL, false

    '发送请求内容,判断发送情况,并进行处理
    On Error Resume Next
    objXMLHttp.Send strPostInfo

    If Err.Number <> 0 Then
        Trackback = "1|TrackBack错误:无法连接服务器"
    Else
        If (objXMLHttp.readyState <> 4) Or (objXMLHttp.Status <> 200) Then
            objXMLHttp.Abort
            Trackback = "1|Trackback超时"
        Else
            objXML.async = false
            objXML.load(objXMLHttp.responseXML)
            If objXML.parseError.errorCode <> 0 Then
                Trackback = "1|TrackBack响应解析错误"
            Else
                If objXML.getElementsByTagName("error")(0).Text="0" Then
                    Trackback = "0|Trackback成功"
                Else
                    Trackback = "1|Trackback错误:"&objXML.getElementsByTagName("message")(0).Text
                End If
            End If
        End If
    End If

    '释放对象
    Set objXMLHTTP = Nothing
    Set objDom = Nothing
End Function


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'#过程名:DealRequest
'#作 用:接收和处理客户端发来的Trackback Ping
'#参 数:无

Sub DealRequest()
    Dim blog_id,tbTitle,tbName,tbURL,tbExcerpt,stat

    '从所请求的URL中提取所引用的blogID,以便从数据库中检索对应的blog
    '这个参数根据你所写的blog程序提供的Trackback地址形式而定
    '这里我们假设这个参数为“id”
    blog_id = Request.QueryString("id")

    '读取出客户端传来的请求中的每个部分
    '注意,这里没有对以Get方式提交的请求作出处理
    '因为2003年以后根据技术规范已经不再接受Get方式的请求
    '如果希望增强兼容性,可以加上对Get方式的请求的处理
    tbTitle = Request.Form("title")
    tbName = Request.Form("blog_name")
    tbURL = Request.Form("url")
    tbExcerpt = Request.Form("excerpt")

    '检索数据库中id为blog_id的blog数据和url为tbURL的Trackback记录
    '如果blog不存在,或者Trackback记录已存在,向客户端返回相应的出错说明
    '我们这里调用一个进程tbResponseXML来完成这项工作
    '调用时,以参数stat=0[1,2]分别表示成功、日志不存在和记录已存在

    tbResponseXML(stat)

    '如果是成功,还应当做好更新TrackBack记录和相关blog引用数的工作
End Sub


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'#过程名:tbResponseXML
'#作 用:接收和处理客户端发来的Trackback Ping
'#参 数:
'#stat:错误代码,0=成功;1=日志不存在;2=Trackback记录已存在
'#strCodePage:要返回的XML的编码

Sub tbResponseXML(stat,strCodePage)
    Response.ContentType = "text/xml" & vbNewLine
    Response.Write "<?xml version=""1.0"" encoding=""" & strCodePage & """?>" & vbNewLine
    Response.Write " <response>" & vbNewLine
    Response.Write " <error>" & stat & "</error>" & vbNewLine
    If stat = 1 Then
        Response.Write " <message>The blog you're trackbacking isn't exist!</message>" & vbNewLine
    ElseIf stat = 2 Then
        Response.Write " <message>You can not Trackback a blog twice from the same URL.</message>" & vbNewLine
    End If
    Response.Write " </response>"
End Sub
%>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值