06 Kasım 2004

Delphi ile rss reader yapalım

Olayı güzel güzel yazıyordum fakat birden ne olduğunu anlamadan sayfa refresh olunca tüm yazılar gitti. şimdi o kadar yazıyı yazmaya üşeniyorum doğrusu. bu sefer kısa kısa geçecem. Nasıl olsa kaynak kodu yanında :) 1-internetten xml dosyasını download edecez 2-xml dosyasını parse edip içinden gerekli verileri alacaz 3-listview kullanarak bu bilgileri gösterecez hadi başlayalım. forma gerekli bileşenleri koyarak işe başlayalım. birer adet TButton, TEdit, TlistView, TMemo ve 2 tane TLabel ve de en önemlisi TXMLDocument. (internet paletinde ikamet ediyor kendileri) ilk önce download işini halleden fonksiyon. Uses satırına ExtActns eklemeyi unutmayın.
function DownloadURLFile(const strUrl, strLocalFile : TFileName) : boolean; begin Result:=True; with TDownLoadURL.Create(nil) do try URL:=strUrl; Filename:=strLocalFile; try ExecuteTarget(nil); except Result:=False; end; finally Free; end; end;
gayet açık sanırım :) şimdi sırada download edilen xmli parçalamaya geldi.
procedure TForm1.btnRefreshClick(Sender: TObject); var strLocalFile : TFileName; StartItemNode : IXMLNode; ANode : IXMLNode; STitle, sDesc, sLink : widestring; begin //internetteki dosyanın bilgisayarda kaydedileceği yol strLocalFile := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'temp.xml'; //internetten dosya download ediliyor. Screen.Cursor:=crHourglass; try if not DownloadURLFile(edtBlogAdres.Text, strLocalFile) then begin Screen.Cursor:=crDefault; Raise Exception.CreateFmt('Sayfa alınamadı. Lütfen internet bağlantınızı kontrol edin.',[]); Exit; end; if not FileExists(strLocalFile) then begin Screen.Cursor:=crDefault; raise exception.Create('Dosya bulunamadı'); Exit; end; lv.Clear; XMLDoc.FileName := strLocalFile; XMLDoc.Active:=True; //hangi sıradaki elemanlara ulaşmak istediğimizi ayarlıyoruz StartItemNode := XMLDoc.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item'); ANode := StartItemNode; //bütün elemanlara erişebilmek için döngüye alıyoruz repeat STitle := ANode.ChildNodes['title'].Text; sLink := ANode.ChildNodes['link'].Text; sDesc := ANode.ChildNodes['description'].Text; //değerleri listviewe ekliyoruz... with LV.Items.Add do begin Caption := STitle; SubItems.Add(sLink); SubItems.Add(sDesc); end; //düğümü bir sonraki düğüme eşitleyip devam ediyoruz. //pointerlarla linked list uygulaması yapanlara bu mantık çok //tanıdık gelecektir :) ANode := ANode.NextSibling; until ANode = nil; finally DeleteFile(strLocalFile); Screen.Cursor:=crDefault; end; end;
buda kullanıcının seçtiği haberi label ve memoda göstermek için gerekli olan kod
procedure TForm1.lvSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); begin if lv.ItemIndex = -1 then exit; lblBaslik.Caption := lv.Items[lv.ItemIndex].Caption; lblUrl.Caption := lv.Selected.SubItems[0]; memoAciklama.Text := lv.Selected.SubItems[1]; end;
yeterli test etme imkanı bulamadım ama rss 2.0 da sorunsuz çalışıyor. zaten örnekte alinin bloğunun adresi var :) sonra "ben neden bu kadar hit alıyorum?" diye soruyo kendi kendine :) programın kaynak kodunu indirmek için buraya tıklayın...
Yorum Gönder