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...
6 yorum:
Very nice :)
Gayet hosuma gitti. Buradan internetten bir dosya indirmeyi, xml parse etmeyi, ve listview ozellikleri ile formda url gostermeyi falan ogrenebilir insanoglu.
Ellerine saglik azizim. ( Bu devamini beklerim demek oluyor. )
Üstat kaynak kodların olduğu linki tıkladım ama dosyayı download edemiyorum. acaba linkte problemmi var
sağ tuş --> hedefi farklı kaydet dediğimde sorunsuz bir şekilde dosyaları download ettim. tekrar deneyin....
dosyayi bu linkten indirebilirsiniz.
http://www.hemenpaylas.com/download/53069/BlogXMLTest.rar.html
saadetin abi soyle sorum olacak eger rss'den yenı bır bılgı gelırse bunu nasıl anlayacagız?
tüm linkler kırık ve benden önceki arkadaşın sorusuna da katılıyorum
Yorum Gönder