Guida alle Sitemaps: 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 '<?xml version='1.0' encoding='UTF-8'?>' response.write '<!-- generator='http://www.iteam5.net/francesco/sitemap_gen'-->' response.write '<urlset xmlns='http://www.google.com/schemas/sitemap/0.84'>' 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 '</urlset>' 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 = '<url><loc>'&server.htmlencode(session('server')&file)&'</loc><lastmod>'&filelmdate&'</lastmod><priority>1.0</priority></url>' 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
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 '<!-- pagefound=''&loopurl&''-->' 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 '<?xml version='1.0' encoding='UTF-8'?>' response.write '<!-- generator='http://www.iteam5.net/francesco/sitemap_gen'-->' response.write '<!-- pagefound=''&ubound(arrurl)&''-->' response.write '<urlset xmlns='http://www.google.com/schemas/sitemap/0.84'>' For LoopUrl=0 to ubound(arrurl)-1 response.write '<url>' response.write '<loc>'&server.htmlencode(url&arrUrl(LoopUrl))&'</loc>' response.write '<lastmod>'&sitemapDate&'</lastmod>' response.write '<priority>'&sitemapPriority&'</priority>' response.write '<changefreq>'&sitemapChangefreq&'</changefreq>' response.write '</url>' Next response.write '</urlset>' 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&'<br>' '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 %>













