Creare una sitemaps in ASP

Oggi vediamo come generare una sitemap  usando ASP.

Ecco il codice ASP per generare una sitemap per un webserver. La pagina si chiama sitemap_gen.asp :

<%
' sitemap_gen.asp
' A simple script to automatically produce sitemaps for a webserver, in the Google Sitemap Protocol (GSP)
' by Francesco Passantino
' www.iteam5.net/francesco/sitemap_gen
' v0.1  04.06.05
' v0.2  05.06.05 Listing a directory tree recursively improvement
' v0.3b 09.06.05 File exclusion by Calvin Dunkley
' v0.4  17.06.05 iso8601dates http://www.tumanov.com/projects/scriptlets/iso8601dates.asp
' v0.4b 18.06.05 vdrir bug fixed
' v0.4c 13.07.05 phisical dir patch for some windows systems
'
' BSD 2.0 license,
' http://www.opensource.org/licenses/bsd-license.php


'modificare in base al proprio dominio
session("server")="http://www.yourdomain.net"
vDir = "/"
phisicalDir="C:Inetpubwwwroot"

'Info qui http://www.time.gov/
utcOffset=1


set objfso = CreateObject("Scripting.FileSystemObject")
root = Server.MapPath(vDir)

response.ContentType = "text/xml"
response.write ""
response.write ""
response.write ""

Set objFolder = objFSO.GetFolder(root)
'response.write getfilelink(objFolder.Path,objFolder.dateLastModified)
Set colFiles = objFolder.Files
For Each objFile In colFiles
	response.write getfilelink(objFile.Path,objfile.dateLastModified)
Next
ShowSubFolders(objFolder)

response.write ""
set fso = nothing


Sub ShowSubFolders(objFolder)
	Set colFolders = objFolder.SubFolders
	For Each objSubFolder In colFolders
		if folderpermission(objSubFolder.Path) then
			response.write getfilelink(objSubFolder.Path,objSubFolder.dateLastModified)
			Set colFiles = objSubFolder.Files
			For Each objFile In colFiles
				response.write getfilelink(objFile.Path,objFile.dateLastModified)
			Next
			ShowSubFolders(objSubFolder)
		end if
	Next
End Sub


Function getfilelink(file,data)
	file=replace(file,phisicalDir,"")
	file=replace(file,"","/")
	If FileExtensionIsBad(file) then Exit Function
	If FileNameIsBad(file) then Exit Function
	filelmdate=iso8601date(data,utcOffset)

	getfilelink = ""&server.htmlencode(session("server")&file)&""&filelmdate&"1.0"
	session("URLS")=session("URLS")+1
	Response.Flush
End Function


Function Folderpermission(pathName)
	'modificare qui per escludere un percorso
	PathExclusion=Array("	emp","\_vti_cnf","\_vti_pvt","\_vti_log","cgi-bin")
	Folderpermission =True
	for each PathExcluded in PathExclusion
		if instr(ucase(pathName),ucase(PathExcluded))>0 then
			Folderpermission = False
			exit for
		end if
	next
End Function


Function FileExtensionIsBad(sFileName)
	Dim sFileExtension, bFileExtensionIsValid, sFileExt
	'http://www.googleguide.com/file_type.html
	Extensions = Array("png","gif","jpg","zip","pdf","ps","html","htm","asp","wk1","wk2","wk3","wk4","wk5","wki","wks","wku","lwp","mw","xls","ppt","doc","wks","wps","wdb","wri","rtf","ans","txt")

	if len(trim(sFileName)) = 0 then
		FileExtensionIsBad = true
		Exit Function
	end if

	sFileExtension = right(sFileName, len(sFileName) - instrrev(sFileName, "."))
	bFileExtensionIsValid = false	'assume extension is bad
	for each sFileExt in extensions
		if ucase(sFileExt) = ucase(sFileExtension) then
			bFileExtensionIsValid = True
			exit for
		end if
	next
	FileExtensionIsBad = not bFileExtensionIsValid
End Function

Function FileNameIsBad(sFileName)
        if len(trim(sFileName)) = 0 then
                FileNameIsBad = true
                Exit Function
        end if
        Filename = Array("/alive.asp","/404.asp","/500.asp","/sitemap_gen.asp")
        FileNameNumber = ubound(Filename)
        for i=0 to FileNameNumber
                if Filename(i) = sFileName then
                        FileNameIsBad = True
                end if
        next
End Function

Function iso8601date(dLocal,utcOffset)
	Dim d
	' Converte l' ora locale in UTC
	d = DateAdd("H",-1 * utcOffset,dLocal)

	' crea la data
	iso8601date = Year(d) & "-" & Right("0" & Month(d),2) & "-" & Right("0" & Day(d),2) & "T" & _
		Right("0" & Hour(d),2) & ":" & Right("0" & Minute(d),2) & ":" & Right("0" & Second(d),2) & "Z"
End Function
%>

Di seguito, invece, il codice di sitemap_gen_db.asp , per generare una sitemap dinamica, auto-aggiornabile da database:

' by Francesco Passantino
' www.iteam5.net/francesco/sitemap_gen
' v0.1b released 5 june 2005
' v0.2  released 17 june 2005 iso8601dates http://www.tumanov.com/projects/scriptlets/iso8601dates.asp
' v0.2b released 28 july 2005 id_page=Server.URLEncode(rs("id")) to put words in id, thanks to Mike Kellogg
'
' BSD 2.0 license,
' http://www.opensource.org/licenses/bsd-license.php

MAXURLS_PER_SITEMAP = 50000

'modificare in base al proprio URL
baseurl="http://www.yoursite.com/default.asp?page="

xDb_Conn_Str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("dbyourdb.mdb") & ";"
strsql = "SELECT * FROM yourtable"

'info su http://www.time.gov/ 
utcOffset=1

response.ContentType = "text/xml"
response.write ""
response.write ""
response.write ""

Set conn = Server.CreateObject("ADODB.Connection")
conn.Open xDb_Conn_Str
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open strsql, conn
Do while not rs.eof
	if URLS1.0 then priority="1.0"

		response.write ""&server.htmlencode(baseurl&id_page)&""&filedate&""&priority&""
		URLS=URLS+1
		Response.Flush
	rs.movenext
end if
Loop

response.write ""

rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing


Function iso8601date(dLocal,utcOffset)	
	Dim d
	' converte l' ora locale in UTC
	d = DateAdd("H",-1 * utcOffset,dLocal)

	' ccrea la data
	iso8601date = Year(d) & "-" & Right("0" & Month(d),2) & "-" & Right("0" & Day(d),2) & "T" & _
		Right("0" & Hour(d),2) & ":" & Right("0" & Minute(d),2) & ":" & Right("0" & Second(d),2) & "Z"
End Function
%>

Infine, lo script sitemap_gen_spider, per creare sitemap usando l' MSXML spider:

<%
' sitemap_gen_spider.asp
' A simple script to automatically produce sitemaps for a webserver, in the Google Sitemap Protocol (GSP)
' by Francesco Passantino
' www.iteam5.net/francesco/sitemap_gen
' v0.1 released 9 june 2005
' v0.2 released 17 june 2005 iso8601dates http://www.tumanov.com/projects/scriptlets/iso8601dates.asp
'
' BSD 2.0 license,
' http://www.opensource.org/licenses/bsd-license.php


'configurazione dello script
Url="http://www.yoursite.com/"
FinalDepth=3
LimitUrl=100
'lasciare sitemapDate vuoto se si vuole che appaia sitemapDate=now
sitemapDate=""
'da 0.1 a 1.0
sitemapPriority="0.7"
'valori possibili: always, hourly, daily, weekly, monthly, yearly, never
sitemapChangefreq="monthly"
'info su http://www.time.gov/
utcOffset=1

Dim objRegExp,objUrlArchive,strHTML,objMatch
Server.ScriptTimeout=300
set xmlhttp = CreateObject("MSXML2.ServerXMLHTTP")
Set objUrlArchive=Server.CreateObject("Scripting.Dictionary")
Set objRegExp = New RegExp
objRegExp.IgnoreCase = True
objRegExp.Global = True


'modificabili a piacimento
objRegExp.Pattern = "href=(.*?)[s|>]"
'per rimuovere elementi dagli url html
RemoveText=array("<",">","a href=",chr(34),"'","href=")
'per escludere elementi dagli URL
ExcludeUrl=array("mailto:","javascript:",".css",".ico")


'si si vuole che risulti sitemapDate=now
if sitemapDate="" then filelmdate=now()

sitemapDate=iso8601date(filelmdate,utcOffset)


crawl url,0


For Depth=0 to FinalDepth
	arrUrl=objUrlArchive.Keys
	arrDepth=objUrlArchive.Items
	For LoopUrl= 0 to ubound(arrurl)-1

		'debugging
		'response.write ""

		crawl url&"/"&arrUrl(LoopUrl),Depth

		'se si vuole limitare il numero amssimo di URL
		'if objUrlArchive.Count-1>LimitUrl then exit for

	Next
	erase arrUrl
	erase arrDepth
Next


' crea l' XML
arrUrl=objUrlArchive.Keys
arrDepth=objUrlArchive.Items
response.ContentType = "text/xml"
response.write ""
response.write ""
response.write ""
response.write ""
For LoopUrl=0 to ubound(arrurl)-1
	response.write ""
	response.write ""&server.htmlencode(url&arrUrl(LoopUrl))&""
	response.write ""&sitemapDate&""
	response.write ""&sitemapPriority&""
	response.write ""&sitemapChangefreq&""
	response.write ""
Next
response.write ""


erase arrUrl
erase arrDepth
objUrlArchive.RemoveAll()
set xmlhttp = nothing




Sub crawl(url,depth)
	xmlhttp.open "GET", url, false
	xmlhttp.send ""
	strHTML = xmlhttp.responseText

	For Each objMatch in objRegExp.Execute(strHTML)
		for i=0 to ubound(excludeUrl)
			if instr(objmatch,excludeUrl(i))>0 then objmatch=""
		next
		if objmatch<>"" then
			for i=0 to ubound(RemoveText)
				objMatch=replace(lcase(objMatch),lcase(RemoveText(i)),"")
			next
			'in alcune occasioni è meglio sostituire con if left(objMatch,len(url))=Url then
			if instr(objMatch,"http://")=0 and objmatch<>"" then
				if objUrlArchive.Exists(objMatch)=false then
					objUrlArchive.Add objMatch,depth

					'debugging
					'response.write objmatch&"
" 'response.flush end if end if end if Next End Sub Function iso8601date(dLocal,utcOffset) Dim d ' converte l' ora locale in UTC d = DateAdd("H",-1 * utcOffset,dLocal) ' compone da data iso8601date = Year(d) & "-" & Right("0" & Month(d),2) & "-" & Right("0" & Day(d),2) & "T" & _ Right("0" & Hour(d),2) & ":" & Right("0" & Minute(d),2) & ":" & Right("0" & Second(d),2) & "Z" End Function



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Sara
Hai dubbi su questo articolo?