
Recently I got the chance to implement google RSS news on one of my Blazor Webassembly project. It is very simple to implement using System.ServiceModel.Syndication package

Step 1: Create the Class like
public class NewsItem
{
public string NewsTitle { get; set; } = "";
public string NewsLink { get; set; } = "";
public DateTime PubishDate { get; set; }
}
Step2: Create the Web API controller and write the method for reading RSS like this
[HttpGet("GetNewsFeedData")]
public List<NewsItem> GetNewsFeedData()
{
List<NewsItem> newsItems = new List<NewsItem>();
List<NewsItem> healthData = new List<NewsItem>();
string url = "https://news.google.com/rss/search?q=prescription+drugs&hl=en-US&gl=US&ceid=US:en";
newsItems = FetchRssFeedData(url);
string healthrssPath = "https://news.google.com/rss/search?q='health'";
healthData= FetchRssFeedData(healthrssPath);
var combineList = newsItems.Concat(healthData).ToList();
var result= (from m in combineList orderby m.PubishDate descending
select m).ToList();
return result;
}
public List<NewsItem> FetchRssFeedData(string path)
{
List<NewsItem> NewsDrugs = new List<NewsItem>();
XmlReader reader = XmlReader.Create(path);
SyndicationFeed feed = SyndicationFeed.Load(reader);
reader.Close();
foreach (SyndicationItem item in feed.Items)
{
NewsItem newsItem = new();
newsItem.NewsTitle = item.Title.Text;
newsItem.NewsLink = item.Links[0].Uri.ToString();
newsItem.PubishDate = (DateTime)item.PublishDate.UtcDateTime;
NewsDrugs.Add(newsItem);
}
return NewsDrugs;
}
Step 3: Consume on this api on Razor page like
@if (NewsDrugs != null)
{
@foreach (var item in NewsDrugs)
{
<div class="container">
<div class="row">
<a href="@item.NewsLink" target="_blank" rel="noopener noreferrer">@item.NewsTitle</a>
</div>
<div class="row">
<b>PubishDate : </b> @item.PubishDate.ToString("MM/dd/yyyy")
</div>
<hr />
</div>
}
}
@code {
public List<NewsItem> NewsDrugs { get; set; }
protected override async Task OnInitializedAsync()
{
NewsDrugs = await DiseaseDrugRepository.GetNewsItems();
await base.OnInitializedAsync();
StateHasChanged();
}
}
Note: For Blazor Server, no need to create web api layer, you can directly write on your razor page.