<%@Language = VBScript CodePage=936%> <%Option Explicit%> <% '====================================================== '程序名称: QQ个性签名(心路历程)查看页 '作者: greensea | http://www.gsea.com.cn '完成于: 2007年8月17日 广西百色 ' '提醒:未经他人允许而查看对方的个性签名记录是不好的行为 '====================================================== '定义变量 Dim xmlhttp, NewElement, XMLDom, xslt Dim TotalPage, QQNumber, tmpQQNumber, CurrentPage, i Dim EmotionURL, result Dim XMLHttpError '设置文档头以避免IE认为这是标准XML文件,否则ASP执行出错的话IE会认为这是不合法的XML文件而导致页面无法显示 Response.ContentType = "text/html" EmotionURL = "http://e.cnc.qzone.qq.com/cgi-bin/cgi_emotion_indexlist.cgi?uin={$QQ}&emotionarchive={$page}" '获取QQ心路历程的地址 '获取信息并处理 '|-从 QueryString 获取数据 tmpQQNumber = Request.QueryString("qq") CurrentPage = Request.QueryString("page") '|-过滤QQ号码中的非数字字符 -->其实在提交的时候已经用JS做了限制,所以这个过滤是可有可无的 For i = 1 To Len(tmpQQNumber) If IsNumeric(Mid(tmpQQNumber, i, 1)) Then QQNumber = QQNumber & Mid(tmpQQNumber, i, 1) Next '|-过滤QQ号码的前导0(零) Do While Mid(QQNumber, 1, 1) = "0" QQNumber = Mid(QQNumber, 2, Len(QQNumber)) Loop 'L------------------------- '检查数据,如果QQ为空的话就创建一个XML文档,并通过XSLT解析后输出 If QQNumber = "" Then '首页 Set XMLDom = Server.CreateObject("Microsoft.XMLDOM") XMLDom.LoadXML("") Set xslt = Server.CreateObject("Microsoft.XMLDOM") xslt.Load(Server.MapPath("main.xslt")) '|-输出结果 result = XMLDom.transformNode(xslt.DocumentElement) result = Replace(result, "&", "&") result = Replace(result, "", "") Response.Write result Response.End End If '----------------------------首页部分结束------------------------------------------------ '--------------------------------获取心路历程部分----------------------------------------- '设置页码 If CurrentPage < -1 Or CurrentPage = "" Or CurrentPage = 0 Then CurrentPage = -1 End If CurrentPage = Int(CurrentPage) '创建XMLHTTP对象 EmotionURL = Replace(EmotionURL, "{$QQ}", QQNumber) EmotionURL = Replace(EmotionURL, "{$page}", CurrentPage) Set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP") xmlhttp.open "GET", EmotionURL, False 'On Error Resume Next '容错,防止进行http请求时发生意外 '发送请求获取QQ空间的心路历程数据 xmlhttp.send Set XMLDom = xmlhttp.ResponseXML '返回一个XMLDOM对象 '错误处理(目前主要防止xmlhttp请求超时) If Err Then Set XMlDom = Server.CreateObject("Microsoft.XMLDOM") '发生错误的话则无法返回XMLDOM对象,因此需要创建一个 XMLDom.LoadXML("") '载入一个XML文件 Select Case Err.number Case &H800c0005 'xmlhttp请求失败的错误代码 XMLDom.getElementsByTagName("error")(0).Text = "获取心路历程失败了,请刷新页面再试一次。(连接到QQ空间超时)" Case Else XMLDom.getElementsByTagName("error")(0).Text = "发生未知错误,错误代码:0x" & Hex(Err.number) & ",错误描述:" & Err.description End Select XMLHttpError = True End If '判断此Q号是否开通了QQ空间或将心情保存到QQ空间 If XMLDom.getElementsByTagName("error").Length <> 0 And Not XMLHTTPError Then XMLDom.getElementsByTagName("error")(0).Text = "这个QQ还没有开通QQ空间呢,或者是他/她的空间设置了访问限制,或者是他/她没有写过个性签名。" End If '如果有错误则加上QQ号 If XMLDom.getElementsByTagName("error").Length <> 0 Then Set NewElement = XMLDom.CreateElement("QQNumber") '创建一个名为QQNumber的节点 NewElement.Text = QQNumber '设置QQNumber节点的文本 XMLDom.DocumentElement.AppendChild(NewElement) '在error节点插入QQNumber节点 End If '通过XSLT转换 '|-首先插入QQ号码 If XMLDom.GetElementsByTagName("rss").Length > 0 Then Set NewElement = XMLDom.CreateElement("QQNumber") NewElement.Text = QQNumber XMLDom.GetElementsByTagName("rss")(0).AppendChild(NewElement) End If '|-进行xslt转换 Set xslt = Server.CreateObject("Microsoft.XMLDOM") '创建一个新的XMLDOM对象用来载入XSLT文件 xslt.Load(Server.MapPath("main.xslt")) '载入XSLT文件 '|-输出结果 result = XMLDom.TransformNode(xslt.DocumentElement) result = (Replace(result, "&", "&")) '用XSLT对XMLDom进行转换,并将转换结果的 & 替换为 & result = Replace(result, "", "") '因为从QQ返回的数据里面 < > & 是经过HTMLEncode的,而进行XSLT以后又会进行一次HTMLEncode,因此这里要把在XSLT转换中被替换成 & 的 & 替换回来,这样才能正确显示签名中的HTML字符 Response.Write result '调试用的 = =|| 'Response.Clear 'Response.Write XMLDOM.xml %>