作为所谓的Blog三大特征之一的Trackback Ping,在网络上并没有一个真正的规范,它实际上最早是在Moveable发明并开始运用的一种技术,与另外两项被广泛认为是Blog最主要特征的RSS和Permalink相比,RSS本质上是是一种遵循W3C RDF规范的XML格式,Permalink是一种非常通用的静态地址技术,而Trackback Ping目前为止仅仅是在blog程序中得到运用,除了Moveable的一份技术规范文档外,也没有什么权威的标准,尤其在国内,众多blog程序有的支持有的不支持,有的有限支持,甚至还有因标准不一致而不能互相通信的(参见《blog is dead(blog已死)》http://blog.igooi.com/archive/2005/10/28/6716.aspx)。

  但是作为开发人员,我们不需要去讨论或者争论Trackback是不是死了、它会不会带来恶意Spam这些问题,就像垃圾邮件的存在,并不影响电子邮件的技术进步和使用一样。对于开发人员来讲,既然Trackback被认为是Blog的三大技术之一,而且blog程序的用户有这种需求,那我们在开发blog的时候,就应该包含这项技术。而且,我们应该尽可能地使我们开发的技术符合标准,或者规范,至少让它发挥作用。

  Trackback Ping是由Moveable Type发明的规范,那么在没有更权威的标准之前,我们使用这项技术,当然应该以他们的规范为准,这里是他们的Trackback技术规范文档:http://www.movabletype.org/docs/mttrackback.html。

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

'#函数名: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

转载于:https://www.cnblogs.com/Athrun/archive/2009/05/14/1456388.html

用ASP为blog程序编写Trackback功能 - 小李刀刀(转载)相关推荐

  1. 基于ASP.NET的开源Blog程序总结

    转自:http://www.livelog.org/article.aspx?id=2 .Text http://www.telligentsystems.com/Solutions/Forums/ ...

  2. ASP.NET - 编写ASP.NET应用程序的十大技巧

    在本篇文件中,我们将讨论编程人员在使用ASP.NET开发应用程序时需要注意的10个技巧,这些技巧涉及从缺省的控件.表单名的改变到StringBuilder类的使用,有助于编程人员能够尽快地适应.NET ...

  3. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:为ASP.NET MVC应用程序使用高级功能...

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第十二篇:为ASP.NET MVC应用程 ...

  4. JAVA 编写程序实现如下功能:一个线程进行如下运算1*2+2*3+3*4+……+19*20,而另一个线程则每隔一段时间读取前一个线程的运算结果。

    编写程序实现如下功能:一个线程进行如下运算12+23+34+--+1920,而另一个线程则每隔一段时间读取前一个线程的运算结果. class Count{private int sum;Count(i ...

  5. 如何在ASP.NET Core中编写自定义日志记录提供程序

    目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...

  6. C语言练习题,编写程序实现以下功能。从键盘输入一个整数,若输入数字0,则屏幕显示:“Sunday“;若输入数字1,则屏幕显示:“Monday“;若输入数字2,则屏幕显示:“Tuesday“;若输入数字

    编写程序实现以下功能.从键盘输入一个整数,若输入数字0,则屏幕显示:"Sunday":若输入数字1,则屏幕显示:"Monday":若输入数字2,则屏幕显示:&q ...

  7. Python编程基础 第二章 编程练习 (第2轮开课补充)编写程序实现以下功能:计算beg到end之间的所有水仙花数并输出。如果beg到end之间不存在水仙花数,则输出“not found”。

    9 编写程序实现以下功能:计算beg到end之间的所有水仙花数并输出(水仙花数是一个三位整数,其值与各位数字的立方和相等).如果beg到end之间不存在水仙花数,则输出"not found& ...

  8. 编写程序实现以下功能:计算1~n之间的素数并输出

    编写程序实现以下功能:计算1~n之间的素数并输出 本文旨在基于Python3.7编写代码查询1到任意大于1的整数n之间(含n)所有的素数(质数)并输出 基本思路 对于素数,我们从小学所学知识中知道,素 ...

  9. c语言画bmp五星红旗图片,用asp程序编写一个bmp图片格式的五星红旗

    用asp程序编写一个bmp图片格式的五星红旗 搜索 今天看到一个用asp程序编写一个bmp图片格式的五星红旗,像手绘的一样,很好,把它转过来和大家分享    view sourceprint?001 ...

  10. 已知一个字典变量stu_ infors,包含n个学生信息,每个学生信息,即字典变量stu_ infors每个元素的值为“学号:课程成绩”。现编写-个程序实现以下功能: (1)创建包含n个学生信息的字

    1.已知一个字典变量stu_ infors,包含n个学生信息,每个学生信息,即字典变量stu_ infors每个元素的值为"学号:课程成绩".现编写-个程序实现以下功能: (1)创 ...

最新文章

  1. 什么是二进制数 为什么用二进制数表示计算机信息?
  2. 东南大学c语言下学期期末考试题,东南大学C++期中考试题.doc
  3. 编辑器的合并用不了_Excel多工作簿合并为一个工作簿,10秒搞定,这才是最高效的方式...
  4. 【CTR模型】TensorFlow2.0 的 xDeepFM 实现与实战(附代码+数据)
  5. Android手游《》斗地主完整的源代码(支持单机和网络对战)
  6. 基于matlab的fisher线性判别及感知器判别_基于嵌入表示的网络实体对齐方法进展概述...
  7. CleanMyMac for mac之偏好设置
  8. Android 系统(197)---USB VID
  9. 4.css命名书写规范
  10. 计算机安装的网络协议怎么看,怎么检查电脑是否安装tcp ip和netbeui协议
  11. STM32工程更换芯片方法
  12. 仓库管理(WMS)系统及其组成
  13. 机器学习处理信号分离_【火炉炼AI】机器学习054-用ICA做盲源分离
  14. 程序人生 - 错过等一年!杭州人独属的惠民福利,还有最后三天
  15. 如何将一个逻辑库下所有数据集的名称汇总生成新的数据集BY:crackman
  16. 岑村小学辅导班老师体会有感
  17. 微信小程序 (布局适配与物理逻辑像素)
  18. 计算机基本操作知识课本内容阅读,计算机基础知识及基本操作
  19. 用SpringBoot简单实现登录注册功能
  20. 卖掉亲生“百度音乐”,注资“网易云音乐”,百度到底要干嘛?

热门文章

  1. oc传参数给js_【一句话攻略】彻底理解JS中的回调(Callback)函数
  2. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_07-新增页面-前端-页面完善...
  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-4.动态Sql语句Mybaties SqlProvider...
  4. 小D课堂 - 新版本微服务springcloud+Docker教程_6-03 高级篇幅之zuul常用问题分析
  5. hdu6715 算术 2019百度之星初赛3-1003
  6. Spring Boot 知识笔记(集成zookeeper)
  7. Python 函数也是一种对象
  8. 初始runtime(运行时机制)
  9. element的form表单中如何一行显示多el-form-item标签
  10. [PYTHON]一个简单的单元測试框架