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 !