Realizzare un Feed RSS con le ultime news del nostro sito è sicuramente
tanto interessante quanto semplice. Se avete quindi già un Data Base dove memorizzate le notizie diventa immediato creare uno script ASP che crea un documento RSS (o RDF). L' RSS non è altro che un documento XML che si basa su determinati TAG utilizzati per convenzione. La classica struttura semplificata per un feed RSS è la seguente:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="0.91">
<channel>
<title>Titolo del vostro RSS </title>
<description>Descrizione del vostro RSS</description>
<link>URL del vostro RSS</link>
<item>
<title><![CDATA[ Titolo notizia 1 ]]></title>
<description><![CDATA[ Descrizione o Corpo notizia 1]]></description>
<link><![CDATA[ URL per leggere la notizia 1 sul web]]></link>
</item>
<item>
<title><![CDATA[ Titolo N ]]></title>
<description><![CDATA[ Descrizione o Corpo notizia N]]></description>
<link><![CDATA[ URL per leggere la notizia N sul web]]></link>
</item>
</channel>
</rss>
Se avete già un po' di confidenza con l'XML dovrebbe risultarvi semplice capire di cosa si tratta. Notate l'utilizzo dei blocchi CDATA all'interno di alcuni elementi dell'albero. Questo perché in alcuni casi potrebbero presentarsi dei caratteri speciali che potrebbero mandare in errore il parser del Browser. Soprattutto all'interno degli elementi <link>
delle notizie è facile avere URL di questo tipo:
http://www.sito.com/legginews.asp?idnews=2&lingua=italiano
In questi casi ad esempio il carattere & (e-commerciale) manda in errore il parser XML invalidando il nostro documento RSS. È sempre bene quindi accertarsi che all'interno dei vari elementi non ci sia la possibilità di incontrare caratteri speciali o utilizzare i blocchi CDATA per prevenire errori di questo tipo.
Passiamo alla realizzazione del feed RSS, utilizzando un semoplice file ms Access e codice ASP/VBScript
Struttura del Data Base Access
Codice ASP che crea il documento XML RSS
<%
'Stringa di connessione al nostro Data Base di news
'da modificare in base al percorso del vostro Data Base
StrConnessione = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & _
server.MapPath("/rss/ASP") & "News.mdb"
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open StrConnessione
'Istruzione SQL che prende le news dal Data Base;
'da cambiare con il nome della vostra tabella ed i nomi dei campi
SQL = "SELECT * FROM news Order by idnews desc"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = 3
rs.Open SQL, Conn, 1,1
' Numero totale di records
totfiles = rs.recordcount
xml = "<?xml version=""1.0"" encoding=""UTF-8""?>" & _
"<rss version=""0.91""><channel><title>Le Ultime Notizie</title>" & _
"<description>Notizie dal mondo in tempo reale</description>" & _
"<link>http://www.tgcom.it</link><language>it</language>"
'Se il Record Set non è vuoto
if totfiles <> 0 then
Do while not rs.eof
xml = xml & "<item>"
xml = xml & "<title><![CDATA[" & rs("titolo") & "]]></title>"
xml = xml & "<description><![CDATA[" & rs("descrizione") & "]]></description>"
xml = xml & "<link><![CDATA[http://www.tuosito.com/legginews.asp?id=" & rs("idnews") & "]]></link></item>"
rs.movenext
Loop
End if
xml = xml & "</channel></rss>"
' Impostazione che setta il tipo di file in output su XML
response.ContentType = "text/xml"
response.write xml
'Libero Risorse
rs.close
set rs=nothing
Conn.Close
set Conn=nothing
%>
Visualizzare un documento RSS (o RDF)
Vediamo ora come realizzare uno script ASP capace di leggere e visualizzare in HTML un documento RSS (o RDF) remoto, sfruttando l'oggetto DOM per l'XML. Per visualizzare l'esempio andate a questo URL http://www.enricolai.com/rss/asp/RSSview.asp mentre se volete una lista di indirizzi web RSS potete trovarla qui: http://www.blago.net/.
Script ASP che rielabora un documento XML RSS e RDF
<%
'Rielaboraun documento XML RSS e RDF
'e fornisce in output un documento HTML
url=request("url")
' Creo oggetto DOM XML
Set objXML = Server.CreateObject("msxml2.DOMDocument.3.0")
objXML.async = false
objXML.setProperty "ServerHTTPRequest", True
' validazione del documento XML
objXML.validateOnParse = false 'true
' non conservare spazi
objXML.preserveWhiteSpace = false
blnLoaded = objXML.Load(url)
If Not blnLoaded Then
Response.write "Nessuna news da visualizzare"
Else
set objNodeList = objXML.getElementsByTagName("channel")
For Each objNode In objNodeList
For Each objNode2 In objNode.childNodes
Select Case objNode2.nodeName
Case "title"
html = html + "<tr><td><strong>
html = html + objNode2.firstChild.nodevalue
html = html + "</strong></td></tr>"
Case "link"
html = html + "<tr><td><a target=_blank href="objNode2.firstChild.nodevalue + ">"
html = html + objNode2.firstChild.nodevalue
html = html + "</a></td></tr>"
Case "description"
html = html + "<tr><td><em>"
html = html + objNode2.firstChild.nodevalue
html = html + "</em></td></tr>"
End Select
Next
Next
html = html + "<tr><td><hr></td></tr>"
Set objNodeList = objXML.getElementsByTagName("item")
For Each objNode In objNodeList
For Each objNode2 In objNode.childNodes
Select Case objNode2.nodeName
Case "title"
strTitle = objNode2.firstChild.nodevalue
Case "link"
strURL = objNode2.firstChild.nodevalue
Case "description"
strDescription = objNode2.firstChild.nodevalue
End Select
Next
html = html + "<tr><td><li/><strong><a target=_blank href=" + strURL + ">"
html = html + strTitle + "</a></strong><br />" + strDescription +"</td></tr>"
strTitle = ""
strURL = ""
strDescription = ""
Next
html = "<table width=400>"+html+"</table>"
set objNodeList = Nothing
End if
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
</head>
<body>
<% Response.write (html) %>
<!-- Form per l'inserimento dell'URL RSS remoto -->
<table border="0" width="400" cellspacing="0" cellpadding="0">
<form action="RSSview.asp" method="POST">
<tr><td width="100%"><hr></td></tr>
<tr><td width="100%">Inserire l'URL di un feed RSS o RDF</td></tr>
<tr><td width="100%"><input type="text" size="60" name="url" /></td></tr>
<tr><td width="100%"><input type="submit" value="Visualizza" /></td></tr>
</form>
</table>
</body>
</html>