L'applicazione RSS newsreader Flash - XML è un esempio su come possiamo utilizzare Flash per sviluppare applicazioni interattive e dinamiche in pochissimi KByte!
Per quanto riguarda la possibilità di caricare documenti XML remoti direttamente su un filmato Flash aperto su Browser abbiamo già detto che questo non è possibile per via delle limitazioni del plug-in. Ad ogni modo possiamo utilizzare uno stratagemma per raggirare il problema creando uno script lato server (realizzato anche in ASP) che carica il documento XML remoto e lo fornisce in output o ne crea uno nuovo. In questo caso la provenienza del documento XML è la stessa di quella del filmato SWF, in quanto risiedono sullo stesso server.
Esaminiamo i due casi:
- Nel primo caso lo script lato server carica l'XML e lo porta in output
- Nel secondo caso lo script lato server carica l'XML, lo elabora e ne crea unonuovo che porta in output.
Nel primo caso l'operazione è sicuramente molto veloce mentre nel secondo caso però il documento XML viene processato due volte: la prima volta dallo script ASP che lo carica, legge i nodi ed il contenuto e ne crea un altro inserendo i dati che ci interessano, la seconda volta da Flash che esegue praticamente la stessa cosa. Abbiamo quindi teoricamente un leggero incremento dei tempi di elaborazione (anche se alla fine facendo un test pratico la differenza è impercettibile).
Abbiamo poi un altro svantaggio che è quello di dover scrivere due script per elaborare il documento XML, uno lato server (nel nostro caso abbiamo usato l'ASP) e l'altro lato client ovvero il codice Action Script del filmato. Questo potrebbe incrementare leggermente i tempi di sviluppo dell'applicazione. Questo svantaggio "apparente" cela però un vantaggio non trascurabile, ovvero la possibilità di "filtrare" il documento XML grazie allo script lato server, facendo passare solo le informazioni e i dati che ci interessano realmente. Se alla nostra applicazione Flash servono solo determinati dati estrapolati da un documento XML, possiamo implementare il codice dello script lato server in modo tale da creare in output un documento XML differente. Questo è un grosso vantaggio. Attraverso lo script ad esempio possiamo rendere meno pesante un documento XML eliminando le informazioni superflue e che non ci interessano. Oppure possiamo modificare i TAG di un documento XML affinché possa essere elaborato da una nostra applicazione Flash.
Abbiamo quindi trasformato il nostro svantaggio in un vantaggio; è un po' come la storia del bicchiere: lo vedete mezzo pieno o mezzo vuoto? :)
Per vedere l'esempio on line: http://www.enricolai.com/rss/xmlext.html
In questo esempio sul browser potete inserire un URL di un documento RSS (o RDF) remoto e cliccare su Load.
Il pulsante richiama questa funzione:
function ApriXMLitem () {
_root.loading = "Loading XML data...";
mioxml = new XML();
filexml = "http://www.enricolai.com/rss/red_xml.asp?url="+url;
mioxml.load(filexml);
mioxml.onLoad = ElaboraXML;
function ElaboraXML (success) {
if (mioxml.loaded) {
txt = mioxml.toString();
_root.loading = mioxml.loaded
} else {
_root.loading = "Error opening XML data.";
}
;
delete mioxml;
};
};
Come potete notare dal codice Action Script Flash non carica direttamente il documento XML dall'URL remoto, ma richiama uno script ASP al quale passa il valore dell'URL da caricare (filexml = "http://www.enricolai.com/rss/red_xml.asp?url="+url; ).
Vediamo infine lo script ASP che carica e ricrea un documento XML RSS (red_xml.asp):
<%
' Script ASP che rielabora un documento XML RSS e RDF e fornisce in output un
documento RSS semplificato
Sub RSS (URL)
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 "<error>Error</error>"
Else
set objNodeList = objXML.getElementsByTagName("channel")
For Each objNode In objNodeList
For Each objNode2 In objNode.childNodes
Select Case objNode2.nodeName
Case "title"
xmldoc = xmldoc+"<title>"+ objNode2.firstChild.nodevalue
+"</title>"
Case "link"
xmldoc = xmldoc+"<link>"+ objNode2.firstChild.nodevalue
+"</link>"
Case "description"
xmldoc = xmldoc+"<description>"+
objNode2.firstChild.nodevalue +"</description>"
Case "language"
xmldoc = xmldoc+"<language>"+
objNode2.firstChild.nodevalue +"</language>"
End Select
Next
Next
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
xmldoc = xmldoc + "<item><title>" + strTitle + "</title>" + "<link>" +
strURL +"</link>"+ + "<description>" +
strDescription +"</description></item>"
strTitle = ""
strURL = ""
strDescription = ""
Next
'IMPOSTO L'OUTPUT DEL FILE SU XML
response.ContentType = "text/xml"
'aggiungo i tag rss e channel
xmldoc = "<rss><channel>"+xmldoc+"</channel></rss>"
Response.write (xmldoc)
set objNodeList = Nothing
End if
End sub
' Parametro che viene passato da Flash
url=request("url")
call RSS(url)
%>
Se invece volete usare uno script (ASP) che non elabora l'XML ma che lo carica e lo porta direttamente in output potete utilizzare questo codice (gentilmente concesso da Stefano Baire http://www.stefanobaire.com):
<%
response.ContentType="text/xml"
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
Response.Buffer = TRUE
Urlxml = request("url")
RemoteXML = getHttpFile(Urlxml,"GET" )
response.write(RemoteXML)
function getHttpFile(sUrl, sHTTPType)
Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
xml.Open sHTTPType, sUrl, False
xml.Send
getHttpFile = xml.responseText
Set xml = Nothing
end function
%>
Per scaricare i files ralativi a questo esempio: http://www.enricolai.com/download/xmlext.zip
Sulla base di queste considerazioni la nostra applicazione Flash RSS Newsreader potrebbe essere modificata per funzionare quindi anche su un browser web.
Per scaricare tutti i files ralativi all'RSS NewsReader andate a questo indirizzo: http://www.enricolai.com/download/RSSnewsreader.zip
Come installare l'applicazione:
- Creare un cartella sul vostro server (accertandovi che questo supporti ASP eAccess)
- Aprire i files ASP e modificare il percorso del Data Base
- Mettere tutti i files ASP e il Data Base Access nella cartella creata
- Aprire quindi il file RSSreader.FLA, modificare il percorso del server e creare il file SWF
- Aprire in locale il filmato Flash RSSreader.SWF accertandovi di essere connessi ad internet