Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
XML Parse ve RSS
#1
Forumda XML parse ile ilgili örnekler mevcut ama bir tane de benden olsun Smile

Forumun RSS (Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol) bilgilerini alıp ListView'da gösteren küçük bir uygulama yaptım. 

XML parse, ListView içinde Record saklama, ShellExecute ve TFormatSettings kullanma gibi konularda faydalı olacağını düşünüyorum.

Ekran görüntüsü:

qJrjo3.png



Kodlarda çok fazla anlatılacak bir şey yok bence. Yine soru gelirse cevaplamaya hazırım Smile
unit main;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Xml.xmldom, Xml.XMLIntf, Xml.XMLDoc, Vcl.StdCtrls,
  Vcl.ComCtrls, Winapi.ShellApi;

type
  TForm1 = class(TForm)
    lwXML: TListView;
    XMLDocument1: TXMLDocument;
    btnRefresh: TButton;
    procedure btnRefreshClick(Sender: TObject);
    procedure lwXMLDblClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    /// <summary> ListView'i XML verileri ile doldurur </summary>
    procedure FillList;

    /// <summary> ListView içinde tutulan veri hafızasını serbest bırakır </summary>
    procedure ClearListItems;

    /// <summary> String olarak verilen URL'yi varsayılan browser ile açar </summary>
    procedure OpenUrl(Url: String);

    /// <summary> XML ile gelen tarih bilgisini dd/mm/yyyy hh:nn:ss formatına çevirir </summary>
    /// <remarks> XML tarih formatına örnek: Tue, 12 Dec 2017 16:51:48 +0300 </remarks>
    function ChangeXmlDate(const xmlDate: String): String;
  public
    { Public declarations }
  end;

  TWebData = record
    title: String;
    date_: String;
    link: String;
  end;
  PWebData = ^TWebData;

var
  Form1: TForm1;

implementation

uses DateUtils;

{$R *.dfm}

procedure TForm1.btnRefreshClick(Sender: TObject);
begin
  FillList;
end;

procedure TForm1.FillList;
var
  cur: TCursor;
  aNode: IXMLNode;
  NodeData: PWebData;
begin
  cur := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  ClearListItems;
  lwXML.Clear;
  lwXML.Items.BeginUpdate;
  try
    XMLDocument1.Active := False;
    XMLDocument1.FileName := 'http://www.delphican.com/syndication.php';
    XMLDocument1.Active := True;
    aNode := XMLDocument1.DocumentElement.ChildNodes.First.ChildNodes.FindNode('item');
    repeat
      New(NodeData);
      NodeData.title := aNode.ChildNodes['title'].Text;
      NodeData.date_ := ChangeXmlDate(aNode.ChildNodes['pubDate'].Text);
      NodeData.link := aNode.ChildNodes['link'].Text;

      with lwXML.Items.Add do
      begin
        Caption := NodeData.title;
        SubItems.Add(NodeData.date_);
        Data := Pointer(NodeData);
      end;

      aNode := aNode.NextSibling;
    until (aNode = nil);
  finally
    lwXML.Items.EndUpdate;
    Screen.Cursor := cur;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ClearListItems;
end;

procedure TForm1.lwXMLDblClick(Sender: TObject);
var
  NodeData: TWebData;
begin
  if lwXML.Selected <> nil then
  begin
    NodeData := PWebData(lwXML.Selected.Data)^;
    OpenUrl(NodeData.link);
  end;
end;

procedure TForm1.OpenUrl(Url: String);
var
  SEInfo: TShellExecuteInfo;
begin
  FillChar(SEInfo, SizeOf(SEInfo), 0);
  SEInfo.cbSize := SizeOf(TShellExecuteInfo);
  SEInfo.Wnd := 0;
  SEInfo.lpFile := PChar(Url);
  SEInfo.lpParameters := nil;
  SEInfo.nShow := SW_SHOWDEFAULT;
  SEInfo.lpVerb := 'open';
  SEInfo.lpDirectory := nil;
  ShellExecuteEx(@SEInfo);
end;

function TForm1.ChangeXmlDate(const xmlDate: String): String;
var
  strDate: String;
  FS: TFormatSettings;
  I: Integer;
begin
  strDate := Copy(xmlDate, 6, 20);
  FS := TFormatSettings.Create('en-US');
  for I := 1 to 12 do
  begin
    Result := StringReplace(strDate, ' '+FS.ShortMonthNames[I]+' ', '/'+IntToStr(I)+'/', []);
    if Result <> strDate then
      Break;
  end;
end;

procedure TForm1.ClearListItems;
var
  aItem: TListItem;
begin
  for aItem in lwXML.Items do
    Dispose(PWebData(aItem.Data));
end;

end.


Kaynak kodlar ve projenin tamamı Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol.
There's no place like 127.0.0.1
WWW
Cevapla
#2
Ellerinize sağlık.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#3
Merhaba,
Emek ve paylaşımınız için teşekkür ederim. 
Konu ile pek bir ilgisi yok ama, yapmış olduğunuz örnek uygulama, bana daha önce Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol yazılması konusunu hatırlattı.
Yeni konu açılınca, uzak bildirim ve titreşim, yeni yorum yapılınca yalnızca uzak bildirm alınması hiç de fena olmaz. 
Aktivitenin daha da artmasına vesile olur.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#4
Ben aslında bu projeyi Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol konusunun ikinci bölümü için hazırladım Smile
Delphi IDE'sinde açılan, sürükle bırak mantığyla çalışan bir form içerisinde RSS bilgileri gözükecek.

Fakat RSS'de okundu/okunmadı bilgisi yok (kullanıcı login'e gerek olmadığı için). Bu sebeple Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol şeklinde kullanımı tercih etmek durumunda kalabilirim.
There's no place like 127.0.0.1
WWW
Cevapla
#5
(14-12-2017, Saat: 13:30)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBen aslında bu projeyi Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol konusunun ikinci bölümü için hazırladım Smile
Delphi IDE'sinde açılan, sürükle bırak mantığyla çalışan bir form içerisinde RSS bilgileri gözükecek.

Fakat RSS'de okundu/okunmadı bilgisi yok (kullanıcı login'e gerek olmadığı için). Bu sebeple Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol şeklinde kullanımı tercih etmek durumunda kalabilirim.

Gün boyunca Delphi IDE'si açık. Faydalı bir eklenti olacak. Şimdiden hayırlı olsun diyelim.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#6
(14-12-2017, Saat: 13:30)SimaWB Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBen aslında bu projeyi Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol konusunun ikinci bölümü için hazırladım Smile
Delphi IDE'sinde açılan, sürükle bırak mantığyla çalışan bir form içerisinde RSS bilgileri gözükecek.

İlgiyle bekliyoruz Smile
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Web Sitesine Login Olma ve HTML Parse SimaWB 11 1.317 28-05-2018, Saat: 22:08
Son Yorum: quiet1day
  Web Sitesine Login Olma ve HTML Parse - 2 SimaWB 6 617 13-11-2017, Saat: 10:37
Son Yorum: klavye



Konuyu Okuyanlar: 1 Ziyaretçi