Bejelentkezés

E-mail: 
Jelszó: 
| Regisztráció | Jelszó? |
 



Menü

.Net világ havilap 2004. május - 5. oldal

Rich Site Summary, avagy mire is jó az RSS?

A  Rich  Site  Summary  (RSS)  segítségével  weboldalunkon  megjelenő  újdonságokat  közzétehetjük  XML  formában  más  oldalak  számára.  Az  XML  állományban  az  RSS  specifikáció  szerint  kell  leírnunk  a  közzéteendő  tartalmat  cím,  rövid  leírás,  link  formájában.  Ennek  előnye,  hogy  az  RSS  alapján  készült  XML-t  mindenki  azonos  módon  tudja  felhasználni,  így  nagyon  könnyen  beépítheti  saját  webhelyére  a  mi  általunk  publikált  tartalmat.Ez  a  módszer  nagyon  gyakori  a  hírportálok  esetében,  melyek  felhasználva  az  RSS  adatait  automatikusan  összegyűjtik  a  webről  különféle  helyek  publikációit  és  egy  oldalon  megjelenítik  azt.  Amint  frissítjük  a  hírek  oldalunkat  és  ezzel  az  RSS  állományunkat,  úgy  a  változás  azonnal  megjelenik  az  összes  többi  olyan  helyen,  mely  felhasználja  a  mi  RSS  információinkat.  Saját  RSS  állományt  is  készíthetünk  weboldalainkhoz,  így  azt  mások  letölthetik,  olvashatják,  vagy  akár  beilleszthetik  saját  weblapjaikba  is.E  cikkben  áttekintjük  az  RSS  felépítését  és  használati  módját,  majd  készítünk  egy  Visual  Studio.NET-es  alkalmazást,  melyben  az  MSDN  oldalon  található  RSS-t  egy  ASP.NET-es  alkalmazással  olvassuk  és  tartalmát  saját  weblapunkra  illesztjük. 

  A  mellékelt  példaprogram  megnyitása  előtt  létre  kell  hozni  egy  RSS  nevű  virtuális  könyvtárat  az  IIS-ben.  Ezt  elvégezhetjük  úgy,  hogy  a  mappa  Tulajdonság  ablakában  a  Webmegosztás  lapon  engedélyezzük  a  megosztást  RSS  névvel.További  előkészületi  lépés  a  Button3_Click  függvénynél  található  SqlConnection  osztály  létrehozásánál  megadott  kapcsolódási  sztring  ellenőrzése  és  szükség  szerinti  módosítása  annak  érdekében,  hogy  a  Northwind  példaadatbázis  elérhető  legyen  programból.RSS  specifikációA  Rich  Site  Summary  jelenleg  a  2.0-ás  verziónál  tart,  mely  az  XML  1.0-ra  épül.  Az  RSS  specifikációnak  megfelelő  XML  állomány  leírja  a  webhelyünkön  megjelenő  tartalom  címeit,  megjegyzéseit,  hozzá  tartozó  linkjeit,  valamint  még  sok  más  apró  kiegészítő  információt.  Ezt  az  XML  állományt  nekünk  kell  folyamatosan  frissíteni,  ahogy  weblapunk  tartalma  is  frissül.  Az  RSS  XML  állományát  bárki  elérheti  és  annak  tartalmát  feldolgozva  közzéteheti  saját  oldalain  a  miáltalunk  megadott  adatokat.  Egy  RSS  állomány  felépítése  kötött.  Nem  is  lehetne  ez  másként,  hiszen  akkor  megszűnne  az  egységessége  az  állománynak.  A  specifikációban  foglalt  szabályokat  tehát  mindenkinek  be  kell  tartania  annak  érdekében,  hogy  bárki,  bármilyen  programmal  is  olvassa  azokat,  mindig  egységes  képet  kapjon  az  általunk  közzétett  információkról.A  RSS  XML  állományának  gyökér  eleme  mindig  az  <rss>  lesz.  Ennek  version  nevű  attribútumában  megadható  az  RSS  állomány  verziószáma:<rss  version="2.0">Ez  az  RSS  elem  egy  egyedülálló  channel  elemet  tartalmaz,  melyben  minden  további  információ  le  van  írva.  <rss  version="2.0">    <channel>        <title>.Net  világ</title>          <link>http://www.DotNetWorld.hu/</link>        ...A  channel  elem  az  alábbi  gyermekelemeket  tartalmazhatja:titleItt  adható  meg  az  RSS  dokumentum  címe.  Kötelező  megadni.<title>.Net  világ</title>linkA  webhelyünkre  mutató  link.  Kötelező  megadni.<link>http://www.DotNetWorld.hu/</link>descriptionAz  RSS  dokumentum  tartalmának  rövid  összefoglaló  leírása.  Kötelező  megadni.<description>    Informatikai  havilap  szoftverfejlesztők,      rendszergazdák  részére.  Megjelenik  minden  hónap      első  napján.</description>languageAz  RSS  dokumentum  nyelve.<language>en-us</language>copyrightSzerzői  jog  leírása.<copyright>    Copyright  ©  2004.  Animare  Software  Kft.  Minden  jog      fenntartva!  </copyright>managingEditorA  tartalomkezelő  személy  e-mail  címe,  neve.<managingEditor>      info@animare.hu  (Animare  Software)</managingEditor>webMasterA  webhely  technikai  kezelőjének  e-mail  címe,  neve.<managingEditor>      info@animare.hu  (Animare  Software)</managingEditor>pubDateA  dokumentum  publikálásának  dátuma.  A  dátum  formátuma  az  RFC  822  által  specifikált  forma  lehet.<pubDate>      Sat,  07  Sep  2002  0:00:01  GMT</pubDate>lastBuildDateA  dokumentum  utolsó  módosításának  dátuma.<lastBuildDate>      Sat,  07  Sep  2002  0:00:01  GMT</lastBuildDate>categoryEgy  vagy  több  kategóriát  is  megadhatunk,  melyeket  majd  a  hír  elemeknél  használunk.<category>car</category><category>game</category>generatorMegadható,  hogy  melyik  programmal  generáltuk  az  RSS  állományt.<generator>DWN  RSS  Generator  v1.0</generator>docsAz  RSS  állományunk  leírását  szövegesen  tartalmazó  webhely  URL-je.<link>http://www.DotNetWorld.hu/rss.aspx</link>cloudMegadhatunk  egy  Web  Service-t,  mely  támogatja  az  rssCloud  interface-t,  melyben  implementálva  van  a  HTTP-POST,  XML-RPC  vagy  az  SOAP  1.1.  Ezáltal  a  kliens  kérést  küldhet  Web  Service-ünk  felé,  mely  ezt  követően  automatikusan  értesíti  őt,  ha  RSS  állományunk  tartalmában  változás  áll  be.  Így  kliens  oldalon  automatikusan  frissülhet  a  tartalom.<cloud  domain="www.DotNetWorld.hu"      port="80"  path="/RPC2"        registerProcedure="xmlStorageSystem.rssNotify"      protocol="xml-rpc"  />ttlRSS  állományunk  élettartama  megadható  percben.  Az  itt  megadott  ideig  biztos,  hogy  nem  frissítjük  az  RSS  állományt,  vagyis  a  kliensnek  az  itt  megadott  időközönként  érdemes  elvégeznie  a  frissítést.<ttl>60</ttl>imageHa  szeretnénk  egy  képet  is  hozzárendelni  az  RSS  állományukhoz,  melyet  a  kliens  felhasználhat,  akkor  ezt  megadhatjuk  az  image  elemben.Ez  az  elem  három  újabb  elemet  kötelezően  tartalmaz:• URL  -  itt  adható  meg  egy  link  a  GIF,  JPEG,  vagy  PNG  képre• TITLE  -  a  kép  címe• LINK  -  hogy  hova  mutasson  a  képMegadható  még  három  másik  elem  is,  de  ezeket  nem  kötelező  használni:• DESCRIPTION  -  a  képhez  tartozó  leíró  szöveg,  HTML  oldalon  az  IMG  elem  TITLE  attribútumába  célszerű  ezt  az  adatot  felhasználni• WIDTH  -  a  kép  szélessége  pixelben,  maximum  144  lehet,  az  alapértelmezett  érték  88• HEIGHT  -  a  kép  magassága  pixelben,  maximum  400  lehet,  az  alapértelmezett  érték  31<rss  version="2.0">    <channel>        <image>            <url>                  http://www.DotNetWorld.hu/i/dnw.gif            </url>              <title>                  .Net  világ            </title>              <link>                  http://www.DotNetWorld.hu/            </link>              <description>                    Informatikai  havilap  szoftverfejlesztők,                      rendszergazdák  részére.            </description>              <width>90</width>              <height>55</height>          </image>itemAz  egyes  elemeit  a  közzéteendő  híreinknek  az  item  elemben  adhatjuk  meg.  Az  item  elemből  annyit  helyezzünk  az  RSS  dokumentumba,  ahány  hírt  publikálni  szeretnénk.  Az  item  elem  a  chennel  elemből  nyílik  és  újabb  elemeket  tartalmaz,  melyek  az  alábbiak:• category  -  az  adott  hírelem  kategóriája• title  -  a  hírelem  címe• description  -  a  hírelem  rövid  leírása• link  -  egy  URL,  közvetlenül  az  adott  hír  oldalára<rss  version="2.0">    <channel>        <item>            <category>                  2004.  április            </category>              <title>                  Függvényhívások  adatbázisban  tárolt                    függvénynevek  alapján            </title>              <description>                  Létrehozunk  egy  adatbázist  ...            </description>              <link>                  http://www.dotnetworld.hu/Journal/                  Default.aspx?y=2004&m=4&p=4            </link>          </item>        ...RSS  használata  a  gyakorlatbanA  gyakorlatban  az  RSS  dokumentum  használata  nem  mást  jelent,  mint  programból  XML  állományon  végzett  műveletek  sora.  Annak  aki  még  nem  jártas  kellően  az  XML  programból  történő  felhasználásában,  ajánljuk  hogy  olvassa  át  e  lapban  megjelent  ".NET  Framework  és  az  XML  nyelv"  című  cikket,  mely  a  bemutatja  mindazon  kezdeti  lépést,  mely  e  cikk  további  megértéséhez  szükséges.  Mellékelt  példaprogram  futás  közbenKészítsünk  most  egy  olyan  webhelyet,  mely  képes  bármilyen  RSS  2.0  állományt  olvasni  és  annak  legfontosabb  elemeit  megjeleníteni.A  megvalósításhoz  létrehozunk  egy  Read  nevű  függvényt,  mely  egyetlen  paramétert  vár,  egy  URL-t,  mely  egy  RSS  dokumentumra,  vagyis  egy  XML  állományra  mutat.Elsődleges  feladatunk,  hogy  ezt  az  XML  állományt  betöltsük  egy  XmlDocument  osztályba.  Ahhoz,  hogy  az  internetről  képesek  legyünk  letölteni  ezt  az  XML  állományt,  az  XmlTextReader  osztályt  hívjuk  segítségül.  Ennek  konstruktorában  megadva  a  paraméterként  kapott  URL-t,  máris  képesek  vagyunk  elérni  ezt  az  állományt.  Az  XmlDocument  osztály  Load  függvényének  átadva  az  imént  létrehozott  XmlTextReader  osztály  példányát,  a  betöltés  művelete  elvégződik.  private  void  Read(string  url)  {      XmlDocument  xd  =  new  XmlDocument();      XmlTextReader  xtr  =  new  XmlTextReader(url);      xd.Load(xtr);Első  lépésként  olvassuk  ki  a  címét  az  RSS  dokumentumnak.  Ezt  a  channel/title  elem-ben  találjuk.      XmlNode  xn;      xn  =  xd.DocumentElement["channel"]["title"];      Label1.Text  =  xn.InnerText;A  dokumentum  webhelyére  mutató  linket  egy  HyperLink  kontrol  segítségével  jelenítjük  meg  a  weboldalon.      xn  =  xd.DocumentElement["channel"]["link"];      HyperLink1.Text  =  xn.InnerText;      HyperLink1.NavigateUrl  =  xn.InnerText;Majd  ezután  olvassuk  ki  a  webhely  leírását  a  channel/description  elemből.      xn  =  xd.DocumentElement["channel"]["description"];      Label2.Text  =  xn.InnerText;Ellenőrizzük,  hogy  az  RSS  dokumentumban  létezik-e  kép  bejegyzés.  Ha  adott  a  channel/image  elem,  akkor  igen.  Ez  esetben  megjelenítjük  a  képet  a  weblapunkon,  oly  módon,  hogy  az  linkként  működve  egy  kattintással  máris  a  megadott  webhelyre  ugorjon.      Label3.Text  =  "";      xn  =  xd.DocumentElement["channel"]["image"];      if  (xn  !=  null)      {Első  lépésként  néhány  sztring  változóba  kigyűjtjük  az  image  elemhez  tartozó  gyermek  elemek  szövegeit.          string  imgSrc  =  xd.DocumentElement["channel"]              ["image"]["url"].InnerText;          string  imgTitle  =  xd.DocumentElement["channel"]              ["image"]["title"].InnerText;          string  imgLink  =  xd.DocumentElement["channel"]              ["image"]["link"].InnerText;          string  imgDescription  =  xd.DocumentElement              ["channel"]["image"]["description"].InnerText;          string  imgWidth  =  xd.DocumentElement["channel"]              ["image"]["width"].InnerText;          string  imgHeight  =  xd.DocumentElement["channel"]              ["image"]["height"].InnerText;Ha  ez  adott,  akkor  már  csak  egy  HTML  kódot  kell  generálnunk,  melyben  szerepel  egy  kép,  amely  linkként  működik:                Label3.Text  +=  "<div  align=center>";                Label3.Text  +=  "<a  href=\""  +  imgLink  +                        "\">";                Label3.Text  +=  "<img  src=\""  +  imgSrc  +                        "\"  width="  +  imgWidth  +  "  height="  +                        imgHeight  +  "  title=\""  +  imgDescription  +                        "\"  border=0>";                Label3.Text  +=  "<br>";                Label3.Text  +=  imgTitle;                Label3.Text  +=  "</a>";                Label3.Text  +=  "</div>";            }Utolsó  lépésként  már  csak  az  RSS  dokumentum  item  elemeit  kell  kiolvasnunk  és  valamilyen  formában  megjelenítenünk.  Ehhez  most  azt  a  módszert  választjuk,  hogy  létrehozunk  egy  DataTable-t,  melyben  eltároljuk  az  item  elemek  adatait  és  végül  ezt  egy  DataGrid-ben  megjelenítjük.  A  DataTable  létrehozását  követően  három  oszlopot  készítünk  hozzá  title,  description  és  link  névvel.  E  három  oszlopba  kerülnek  az  azonos  megnevezésű  elemei  az  item-nek.            DataTable  dt  =  new  DataTable();            dt.Columns.Add("title");            dt.Columns.Add("description");            dt.Columns.Add("link");Az  item  elemeiről  kérünk  egy  listát  a  SelectNodes  függvény  segítségével,  melynek  eredményét  egy  XmlNodeList  osztályban  tároljuk:            DataRow  dr;            XmlNodeList  xnl  =  xd.DocumentElement.                  SelectNodes("channel/item");Egy  foreach  ciklust  készítve  végigmegyünk  az  összes  talált  item  elemen.  A  ciklusban  minden  item-hez  készítünk  egy  DataRow  osztályt,  melyben  tároljuk  az  item  aktuális  elemeinek  értékét,  majd  az  egészet  a  DataTable-hez  adjuk.  A  ciklus  végére  a  DataTable  tartalmazza  az  összes  item  adatát.            foreach  (XmlNode  n  in  xnl)            {                dr  =  dt.NewRow();                dr["title"]  =  n["title"].InnerText;                dr["description"]  =                        n["description"].InnerText;                dr["link"]  =  n["link"].InnerText;                dt.Rows.Add(dr);            }Utolsó  lépésként  már  csak  annyi  a  teendőnk,  hogy  a  DataTable-t  a  DataGrid  kontrol  DataSource  property-jének  értékül  adjuk  és  hozzákötjük  a  DataBind  függvény  hívásával.            DataGrid1.DataSource  =  dt;            DataGrid1.DataBind();        }Ezzel  az  RSS  állományt  feldolgoztuk  és  megjelenítettük.  RSS  állomány  generálása  programból  RSS  állomány  létrehozása  SQL  adatbázis  adataibólNézzük  most  azt  a  feladatot,  hogy  saját  adatainkat  szeretnénk  közzétenni  RSS  dokumentum  formájában.  Ehhez  ugyebár  szükségünk  lesz  egy  RSS  specifikációnak  megfelelő  XML  állományra,  melyet  saját  adatainkból  kell  létrehozni.  Válasszuk  most  az  MS  SQL  Northwind  példaadatbázisának  Products  tábláját,  mint  adatforrást,  melyből  az  XML-t  elkészítjük.Első  lépésként  létre  is  hozzuk  a  szükséges  kapcsolatot  az  SQL  szerverrel  egy  SqlConnection  osztályt  felhasználva.        private  void  Button3_Click(object  sender,                System.EventArgs  e)        {            SqlConnection  c  =  new  SqlConnection("Data                  Source=localhost;Initial  Catalog=Northwind;                  Trusted_Connection=yes;connect  timeout=30");Egy  SqlDataAdapter  osztállyal  futtatunk  egy  egyszerű  select  lekérdezést  a  Products  táblára.  Ennek  eredményét  egy  DataTable  osztályba  tároljuk  el,  majd  zárjuk  az  SQL  kapcsolatot.            SqlDataAdapter  da  =  new  SqlDataAdapter(                  "select  *  from  Products",  c);            DataTable  dt  =  new  DataTable();            c.Open();            try            {                da.Fill(dt);            }            finally            {                c.Close();            }A  kívánt  adatok  most  már  rendelkezésünkre  állnak  a  DataTable  osztályban,  nézzük  hát  miként  lesz  belőle  RSS  dokumentum.Az  XML  állomány  létrehozásához  az  XmlDocument  osztály  szolgál  alapul.  Ennek  gyökér  eleme  a  specifikációnak  megfelelően  az  rss  lesz,  melyhez  egy  attribútumban  annak  verziószámát  is  megadhatjuk.            XmlDocument  xd  =  new  XmlDocument();            XmlNode  xnRSS  =                      xd.AppendChild(xd.CreateElement("rss"));            XmlAttribute  xa  =                      xd.CreateAttribute("version");            xa.Value  =  "2.0";            xnRSS.Attributes.Append(xa);            Minden  további  érték  a  channel  elembe  kerül,  így  létrehozzuk  azt  és  tároljuk  a  kapott  XmlNode  osztályt,  hogy  a  további  elemeket  már  ebből  legyünk  képesek  létrehozni.                        XmlNode  xnChannel  =  xnRSS.AppendChild(                  xd.CreateElement("channel"));A  channel  elem  alá  létrehozzuk  a  title,  link,  description  és  language  elemeket,  értelemszerű  adatokkal  kitöltve  azt.  xnChannel.AppendChild(xd.CreateElement("title")).      InnerText  =  ".Net  világ  példa  RSS  állomány";  xnChannel.AppendChild(xd.CreateElement("link")).      InnerText  =  "http://www.DotNetWorld.hu/";  xnChannel.AppendChild(xd.CreateElement(      "description")).InnerText  =  "Ez  egy  programból        generált  RSS  állomány.";  xnChannel.AppendChild(xd.CreateElement("language")).      InnerText  =  "hu-hu";Ezek  után  nekiállunk  az  item  elemek  létrehozásának,  melyhez  egy  foreach  ciklust  használunk,  amely  végigmegy  minden  egyes  során  a  DataTable-nek.  XmlNode  xnItem;      foreach  (DataRow  dr  in  dt.Rows)  {A  ciklusmagban  létrehozunk  egy  item  elemet,  mely  alá  felvesszük  a  title,  description  és  link  nevű  elemeket  úgy,  hogy  a  szükséges  értékeket  a  DataTable  aktuális  sorából  vesszük.      xnItem  =  xnChannel.AppendChild(            xd.CreateElement("item"));      xnItem.AppendChild(xd.CreateElement("title")).            InnerText  =  "Termék  azonosító:  "  +              dr["ProductID"].ToString();      xnItem.AppendChild(xd.CreateElement(            "description")).InnerText  =              dr["ProductName"].ToString();      xnItem.AppendChild(xd.CreateElement("link")).            InnerText  =  "http://www.northwind.hu/                      product.aspx?id="  +  dr["ProductID"].ToString();  }  A  ciklus  végére  már  el  is  készültünk  az  RSS  állományunkkal,így  nincs  más  dolgunk,  mint  lementeni  azt  egy  XML  állományba  Products.xml  névvel:            XmlTextWriter  xtw  =  new  XmlTextWriter(Server.                    MapPath("Products.xml"),  Encoding.UTF8);            xtw.Formatting  =  Formatting.Indented;            xd.Save(xtw);            xtw.Close();Miután  az  állomány  adott,  nem  marad  más  hátra,  mint  annak  kipróbálása.  Ehhez  a  már  kész  Read  függvényünket  használjuk,  melynek  URL  paraméterébe  megadjuk  az  imént  létrehozott  állományt.            Read("http://localhost/RSS/Products.xml");        }Füredi  Anna