用ASP為blog程序編寫Trackback功能作者:小李刀刀 日期:2005-11-19 作為所謂的Blog三大特征之一的Trackback Ping,在網(wǎng)絡(luò)上并沒有一個真正的規(guī)范,它實際上最早是在Moveable發(fā)明并開始運用的一種技術(shù),與另外兩項被廣泛認為是Blog最主要特征的RSS和Permalink相比,RSS本質(zhì)上是是一種遵循W3C RDF規(guī)范的XML格式,Permalink是一種非常通用的靜態(tài)地址技術(shù),而Trackback Ping目前為止僅僅是在blog程序中得到運用,除了Moveable的一份技術(shù)規(guī)范文檔外,也沒有什么權(quán)威的標準,尤其在國內(nèi),眾多blog程序有的支持有的不支持,有的有限支持,甚至還有因標準不一致而不能互相通信的(參見《blog is dead(blog已死)》http://blog./archive/2005/10/28/6716.aspx)。
但是作為開發(fā)人員,我們不需要去討論或者爭論Trackback是不是死了、它會不會帶來惡意Spam這些問題,就像垃圾郵件的存在,并不影響電子郵件的技術(shù)進步和使用一樣。對于開發(fā)人員來講,既然Trackback被認為是Blog的三大技術(shù)之一,而且blog程序的用戶有這種需求,那我們在開發(fā)blog的時候,就應該包含這項技術(shù)。而且,我們應該盡可能地使我們開發(fā)的技術(shù)符合標準,或者規(guī)范,至少讓它發(fā)揮作用。 Trackback Ping是由Moveable Type發(fā)明的規(guī)范,那么在沒有更權(quán)威的標準之前,我們使用這項技術(shù),當然應該以他們的規(guī)范為準,這里是他們的Trackback技術(shù)規(guī)范文檔:http://www./docs/mttrackback.html。 Trackback的完整實現(xiàn)至少包含兩個方面,其一:客戶端發(fā)送Trackback Ping;其二:服務器端接收和處理Trackback Ping,并向客戶端返回處理結(jié)果。然后,根據(jù)需要我們可以考慮在客戶端接收或者不接收,處理或者不處理返回的信息。下面是具體的代碼: ‘#函數(shù)名:Trackback ‘#作 用:向指定的URL發(fā)送Trackback Ping,并根據(jù)服務器端返回的信息,提示用戶處理情況。 ‘#參 數(shù): ‘#RemoteURL = 目標URL,也即所引用的blog所提供的引用地址 ‘#MyBlogURL = 我的Blog的URL ‘#MyBlogName = 我的blog站點名稱 ‘#MyBlogTitle = 當前這篇blog的標題 ‘#MyBlogExcerpt = 當前這篇blog的摘要 ‘#返回結(jié)果:字符串,以“|”分隔,第一部分為數(shù)字,0表示成功,1表示有錯;第二部分是具體信息。 ![]() Function Trackback(RemoteURL,MyBlogURL,MyBlogName,MyBlogTitle,MyBlogExcerpt)
Dim objXMLHttp,objXML,intStat,strMessage,strPostInfo ‘對參數(shù)進行必要的處理,比如URLEncode之類 MyBlogURL = Server.URLEncode(MyBlogURL) MyBlogName = Server.URLEncode(MyBlogName) MyBlogTitle = Server.URLEncode(MyBlogTitle) MyBlogExcerpt = Server.URLEncode(MyBlogExcerpt) ‘構(gòu)造要發(fā)送的請求內(nèi)容 strPostInfo = "title=" & MyBlogTitle strPostInfo = strPostInfo & "&url=" & MyBlogURL strPostInfo = strPostInfo & "&excerpt=" & MyBlogExcerpt strPostInfo = strPostInfo & "&blog_name=" & MyBlogName ‘創(chuàng)建對象 Set objXMLHttp = Server.CreateObject("MSXML2.ServerXMLHTTP") Set objXML = Server.CreateObject("Microsoft.XMLDOM") ‘以post方式打開XMLHTTP對象 objXMLHttp.Open "POST", RemoteURL, false ‘發(fā)送請求內(nèi)容,判斷發(fā)送情況,并進行處理 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 ‘#作 用:接收和處理客戶端發(fā)來的Trackback Ping ‘#參 數(shù):無 ![]() Sub DealRequest()
Dim blog_id,tbTitle,tbName,tbURL,tbExcerpt,stat ‘從所請求的URL中提取所引用的blogID,以便從數(shù)據(jù)庫中檢索對應的blog ‘這個參數(shù)根據(jù)你所寫的blog程序提供的Trackback地址形式而定 ‘這里我們假設(shè)這個參數(shù)為“id” blog_id = Request.QueryString("id") ‘讀取出客戶端傳來的請求中的每個部分 ‘注意,這里沒有對以Get方式提交的請求作出處理 ‘因為2003年以后根據(jù)技術(shù)規(guī)范已經(jīng)不再接受Get方式的請求 ‘如果希望增強兼容性,可以加上對Get方式的請求的處理 tbTitle = Request.Form("title") tbName = Request.Form("blog_name") tbURL = Request.Form("url") tbExcerpt = Request.Form("excerpt") ‘檢索數(shù)據(jù)庫中id為blog_id的blog數(shù)據(jù)和url為tbURL的Trackback記錄 ‘如果blog不存在,或者Trackback記錄已存在,向客戶端返回相應的出錯說明 ‘我們這里調(diào)用一個進程tbResponseXML來完成這項工作 ‘調(diào)用時,以參數(shù)stat=0[1,2]分別表示成功、日志不存在和記錄已存在 tbResponseXML(stat) ‘如果是成功,還應當做好更新TrackBack記錄和相關(guān)blog引用數(shù)的工作 End Sub ‘#過程名:tbResponseXML ‘#作 用:接收和處理客戶端發(fā)來的Trackback Ping ‘#參 數(shù): ‘#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 [本日志由 小李刀刀 于 2006-01-11 10:10 AM 編輯]
![]() ![]() ![]() |
|
來自: liuqg > 《trackback》