Tentokrát si ukážeme, jak do naší aplikace vypsat nabídku článků jiného serveru. Načteme zdroj RSS a následně jej přetransformujeme jako XML pomocí XSL šablony. Pro čtení zdrojů RSS si připravíme vlastní proceduru, takže nabídku článků budeme moci snadno vložit i opakovaně na libovolné místo ve stránce.

Na rovinu je potřeba říct, že ASP je v tuto chvíli již zastaralé a neposkytuje pro vývojáře takový komfort jako ASP.NET. V našem příkladě, který vznikl jen jako doplněk k článkům o transformaci XML v ASP a čtení RSS v ASP.NET, silně pocítíme absenci mechanismu cachování. Berte jej proto jako ukázku možností snadného doplnění starší aplikace (redakční systém, weblog) pracující v systému ASP.

Na zmíněné články odkazuji zejména pro princip transformace v ASP a návrh XSLT šablony pro transformaci RSS, kterou se zde zabývat nebudeme. Než ale budeme pokračovat, doporučuji vám prohlédnout si ukázku (zdrojový kód).

Nejprve ukázka kódu stránky, ve které použijeme proceduru (viz níže) zobrazující RSS:

<!– #include file=“RSSReader.inc.asp“ –><?xml version=“1.0″ encoding=“utf-8″ ?>
<!DOCTYPE html PUBLIC „-//W3C//DTD XHTML 1.0 Transitional//EN“ „http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=“http://www.w3.org/1999/xhtml“ xml:lang=“cs“ lang=“cs“ dir=“ltr“>
  <head>
    <meta http-equiv=“Content-type“ content=“text/html; charset=utf-8″ />
    <title>RSS Demo</title>
  </head>
  <body>
    Interval.cz – RSS 2.0<br />
    <div style=“margin:6px;padding:6px;background-color:lightgreen;width:300px“>
      <% getRSS „http://interval.cz/__rss/rss.asp“,“RSSReader.xslt“ %>
    </div>
  </body>
</html>

Vidíme, že potřebný kód do stránky includujeme ze souboru RSSReader.inc.asp, výsledek použité procedury se potom objeví v části ASP kódu (uzavřeno do <% %>). Nadřízený kontejner DIV určuje styl zobrazení – v našem případě sloupec dané šířky, barvy pozadí a odsazení z vnějšku a zevnitř. Výsledkem zpracování této procedury je pouze výstup HTML kódu, proto ve své aplikaci můžete samozřejmě použít uvedenou proceduru tolikrát, kolikrát chcete, a vůbec ji třeba ani do žádného kontejneru nevnořovat.

„Přiražení“ deklarace XML v hlavičce stránky na povel pro include je nutné – jinak by se ve výsledném kódu objevil jako první prázdný řádek, což je v rozporu se specifikací, podle které jako první musí opravdu být deklarace XML. S ohledem na porovnání s již zmíněnou aplikací v ASP.NET jsem zvolil kódování UTF-8, není ale problém použít kódování jiné (i když objekt XMLDOM. interně pracuje právě v UTF-8).

Nyní zbývá popsat princip procedury, která stahuje vzdálený zdroj RSS prostřednictvím protokolu HTTP a provádí jeho transformaci. Budeme ji mít uloženou v souboru RSSReader.inc.asp:

<script language=“VBScript“ runat=“server“>
Sub getRSS(ByVal rssFile, ByVal xslFile)
  Dim rssXML, rssXSLT, rssHTTP // deklarace použitých proměnných
  Set rssHTTP = Server.CreateObject(„Microsoft.XmlHttp“) // nastavit jako nově vytvořený objekt XmlHttp
  rssHTTP.Open „GET“, rssFile, False // použít metodu Open pro získání obsahu ze zadané URL
  rssHTTP.Send // odeslat požadavek
  Set rssXML = Server.CreateObject(„Microsoft.XMLDOM“)
  rssXML.async = False
  rssXML.loadxml(rssHTTP.responseXML.xml) // jako zdroj XML pro transformaci „naloudovat“ výsledek členu responseXML.xml
  Set rssHTTP = Nothing // uklidit již nepotřebný objekt
  Set rssXSLT = Server.CreateObject(„Microsoft.XMLDOM“)
  rssXSLT.async = False
  rssXSLT.load(Server.MapPath(xslFile))
  rssXML.transformNodeToObject rssXSLT, Response
  Set rssXML = Nothing
  Set rssXSLT = Nothing
End Sub
</script>

Procedura vychází z principu článku o transformaci XML v ASP, navíc zde musíme zajistit dopravení obsahu RSS ze vzdáleného serveru do objektu XMLDOM. Využijeme k tomu objekt XmlHttp. Inicializujeme patřičné parametry metodou open a metodou send odešleme požadavek vzdálenému serveru. Načtený zdroj RSS máme potom pro další zpracování k dispozici jako parsovaný XML obsah ve vlastnosti xml metody responseXML. Dále už probíhá transformace dle zadaného XSLT souboru (ten máme u naší aplikace, nestahuje se z cizího serveru), princip je tedy shodný jako v již zmíněném článku.

Ve finální aplikaci by se patřilo ještě ošetřit možné chybové stavy, které mohou vzniknout chybějícím či nepřístupným RSS nebo souborem šablony XSLT, ale také jejich chybnou syntaxí. Oproti ASP.NET zde nemáme žádný další komfort, například v podobě cachování, proto je tento způsob vhodný opravdu jen tam, kde z nějakého důvodu ASP.NET nemůžeme použít (např. je projekt příliš rozsáhlý než aby bylo možné stávající ASP stránky jednoduše upravit na ASP.NET a využívá práci sessions, které neumožňují koexistenci ASP i ASP.NET stránek v rámci jedné aplikace). Již z ukázky vidíte, že načtení stránky docela zdržuje zejména stažení RSS z cizího serveru, proto je tento „holý“ způsob bez cachování, nebo třeba jednorázové stažení a vygenerování souboru na našem serveru, vhodný spíše pro stránky s menším počtem přístupů.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět