道頓堀
Delphi 10.3 + WinRT APIで ブログのRSSフィードを取得するプログラムを作ってみた。
WinRTRSSを取得するにはSyndicationClientクラスからRetrieveFeedAsyncメソッドをコールすればいいだけなので、C#などで実装すると3行で済むのですが、Delphiで実装する場合WinRTの戻り値をIInterface継承のインターフェイスで受けるので3行ということでは済みそうにないです。然し、Delphi 10.3WinRT APIの一部は揃っていますので不自由はありません。
Delphi WinRT

SyndicationClientのクラスを使うにはTSyndication_SyndicationClientがWinapi.WebRT.pasに存在します。それでインスタンスを作ります。其の場合、変数はSyndication_ISyndicationClientというインターフェイスである必要があります。これはDelphiWinRT使う場合このパターンが殆どです。Syndication_ISyndicationClient.RetrieveFeedAsyncにURLを渡すのですがこれもIUriRuntimeClassを作成する必要がありDelphiのStringでは渡せません。Delphi StringからHSTRINGへ変換してからURLを作成します。


procedure TForm1.kansu;
begin

end;


procedure TForm1.Button1Click(Sender: TObject);
var
  SyndicationClient: Syndication_ISyndicationClient;
  UrlStr: TWindowsString; 
  hs1 : HSTRING;
  Url: IUriRuntimeClass;
  syndicationFeed: IAsyncOperationWithProgress_2__Syndication_ISyndicationFeed__Syndication_RetrievalProgress;
begin
  UrlStr  := TWindowsString.Create('http://rssblog.ameba.jp/mojeld/rss20.xml');
  hs1 := UrlStr;
  SyndicationClient := TSyndication_SyndicationClient.Create;
  Url := TUri.CreateUri(hs1);

  syndicationFeed  :=  SyndicationClient.RetrieveFeedAsync(Url);
  Await(syndicationFeed, kansu); //第2引数はnilでもOK?かな?
  OutputDebugString( PChar(TWindowsString.HStringToString( syndicationFeed.GetResults.Title.Text)) );
  
//上記OutputDebugStringは、RSSのタイトル部の文字列です。 for var i:Integer := 0 to syndicationFeed.GetResults.Items.Size-1 do begin OutputDebugString( PChar( TWindowsString.HStringToString(syndicationFeed.GetResults.Items.GetAt(i).Title.Text) )); //ここでRSSのタイトル一覧を出力しています。 end;

WinAPI.WinRT.Utils.pasには、Await()という関数もあるので使うと便利です。