Récupérer des actualités depuis un flux RSS en ligne
Par Delphi Source - March 21, 2026 · Vues: 15 · Catégories: Snippets · Tags: #RSS

Récupérer des actualités depuis un flux RSS en ligne

Récupérer, analyser et extraire facilement des actualités depuis un flux RSS en ligne.

unit RSS;
 
interface
 
uses
  System.SysUtils, System.Classes, System.Net.HttpClient, System.Net.URLClient;
 
type
  // Classe pour récupérer des actualités depuis un flux RSS en ligne
  TRSSOnline = class(TComponent)
  private
    FHttpClient: THTTPClient;
    function GetNewsFeed(const URL: string): string;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
 
    function GetNewsFromRSSFeed(const RSSUrl: string): TStringList;
  end;
 
implementation
 
uses
  Xml.XMLDoc, Xml.XMLIntf;
 
{ TRSSOnline }
 
constructor TRSSOnline.Create(AOwner: TComponent);
begin
  inherited;
  FHttpClient := THTTPClient.Create;
end;
 
destructor TRSSOnline.Destroy;
begin
  FHttpClient.Free;
  inherited;
end;
 
/// Effectue une requête GET sur l'URL spécifiée et retourne le contenu sous forme de chaîne.
function TRSSOnline.GetNewsFeed(const URL: string): string;
var
  Response: IHTTPResponse;
begin
  try
    Response := FHttpClient.Get(URL);
    if Response.StatusCode = 200 then
      Result := Response.ContentAsString()
    else
      raise Exception.CreateFmt('Erreur dans le flux RSS : code %d', [Response.StatusCode]);
  except
    on E: Exception do
      raise Exception.Create('Erreur HTTP : ' + E.Message);
  end;
end;
 
/// Récupère, analyse le flux RSS et retourne une TStringList contenant les articles.
function TRSSOnline.GetNewsFromRSSFeed(const RSSUrl: string): TStringList;
var
  XMLString: string;
  XMLDoc: IXMLDocument;
  RSSChannel, NewsItem: IXMLNode;
  I: Integer;
  NewsList: TStringList;
begin
  NewsList := TStringList.Create;
  try
    XMLString := GetNewsFeed(RSSUrl);
    XMLDoc := TXMLDocument.Create(nil);
    XMLDoc.LoadFromXML(XMLString);
    XMLDoc.Active := True;
 
    RSSChannel := XMLDoc.DocumentElement.ChildNodes.FindNode('channel');
    if Assigned(RSSChannel) then
    begin
      for I := 0 to RSSChannel.ChildNodes.Count - 1 do
      begin
        if SameText(RSSChannel.ChildNodes[I].NodeName, 'item') then
        begin
          NewsItem := RSSChannel.ChildNodes[I];
          NewsList.Add('Titre: ' + NewsItem.ChildNodes['title'].Text);
          NewsList.Add('Lien: ' + NewsItem.ChildNodes['link'].Text);
          NewsList.Add('Description: ' + NewsItem.ChildNodes['description'].Text);
          NewsList.Add('Date de publication: ' + NewsItem.ChildNodes['pubDate'].Text);
          NewsList.Add('------------------------------------------');
        end;
      end;
    end
    else
      raise Exception.Create('Flux RSS invalide ou mal formé.');
 
    Result := NewsList;
  except
    NewsList.Free;
    raise;
  end;
end;
 
end.

Exemple d'utilisation

procedure TForm1.FormCreate(Sender: TObject);
var
  RSSOnline: TRSSOnline;
  RSSList: TStringList;
begin
  RSSOnline := TRSSOnline.Create(nil);
  try
    try
      RSSList := RSSOnline.GetNewsFromRSSFeed('https://www.franceinfo.fr/titres.rss');
      try
        Actu.Lines.Assign(RSSList); // Memo
      finally
        RSSList.Free;
      end;
    except
      on E: Exception do
        ShowMessage('Erreur : ' + E.Message);
    end;
  finally
    RSSOnline.Free;
  end;
end;


Un petit clic (J'aime) qui fait plaisir !