Czytnik kanału RSS
Struktura
Kanał rss to w rzeczywistości plik xml o takiej strukturze:<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0"> <channel> <title>Nazwa kanału</title> <link>http://www.4programmers.net/</link> <description><![CDATA[Informacje o kanale]]></description> <item> <title>Pierwszy news</title> <link>http://www.4programmers.net/news.php?id=1</link> <description><![CDATA[Treść newsa]]></description> </item> <item> <title>Drugi news</title> <link>http://www.4programmers.net/news.php?id=2</link> <description><![CDATA[Treść newsa]]></description> </item> </channel> </rss>
Obsługa
Stuktura jest chyba oczywista nawet dla laików. Tylko jak do cholery to odczytać? Na pewno potrzebujemy parsera XML - ja wybrałem XMLDocument (jest w Delphi 2009 Tria - tyle wiem :). Przy jego pomocy udało mi się stworzyć coś na wzór tego paska z telewizji TVN24. Nie udostępniam go, bo wywala tyle errorów, że much nie siada.
Potrzebne komponenty
Wstaw na formę ListBoxa, Memo, Buttona oraz oczywiście nasz niezawodny parser.
Właściwośći ReadOnly Mem'a ustaw na true.
Wykasuj wszystkie linie z memo.
Nazwę parsera na np. XMLDoc.
Dodaj zmienne:
var Linki, Tresci : TStringList;
Kod
procedure TForm2.Button1Click(Sender: TObject); begin ShellExecute(Handle, 'open', PWideChar(Linki[ListBox1.ItemIndex]), nil, nil, SW_SHOWNORMAL); // Po kliknięciu przycisku otwórz przeglądarkę z pełną wersją artykułu end; procedure TForm2.FormShow(Sender: TObject); var PierwszyNews : IXMLNode; News : IXMLNode; sTytul, sTresc, sLink : WideString; begin Linki := TStringList.Create; Tresci := TStringList.Create; //Tworzymy zmienne XMLDoc.Active:=True; //Aktywujemy parser XMLDoc.LoadFromFile('C:\Kanal.xml'); PierwszyNews := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item') ; News := PierwszyNews; repeat sTytul := News.ChildNodes['title'].Text; //∨ sLink := News.ChildNodes['link'].Text; //Ustawiamy wartości zmiennych na aktualnie parsowany item sTresc := News.ChildNodes['description'].Text; //∧ //dodawanie tytułu newsa do listboxa i stringlist'ów∨ ListBox1.Items.Add(sTytul); Tresci.Add(sTresc); Linki.Add(sLink); News := News.NextSibling; until News = nil; end; procedure TForm2.ListBox1Click(Sender: TObject); begin Memo1.Lines.Clear; Memo1.Lines.Add(Tresci[ListBox1.ItemIndex]); // Czyścimy zawartość memo i wstawiamy treść newsa end;
Jeśli nie masz na dysku pliku .xml poczytaj o ściąganiu plików w artykule o Indy.
i tak dobrze - mój pierwszy art