psturtle.com/_includes/Index.rss.ps1
<# .SYNOPSIS Includes `index.rss` .DESCRIPTION Includes the content for an `index.rss`. This should be called after the build to generate an RSS feed for the site. #> #region index.rss if (-not $Site.NoRss) { $pagesByDate = @($site.PagesByUrl.GetEnumerator() | Sort-Object { $_.Value.Date } -Descending) $lastPubDate = if ($pagesByDate.Values.Date) { $pagesByDate[0].Value.Date.ToString('R') } else { $lastBuildTime.ToString('R') } $rssXml = @( '<rss version="2.0">' '<channel>' "<title>$([Security.SecurityElement]::Escape($( if ($site.Title) { $site.Title } else { $site.CNAME } )))</title>" "<link>$($site.RootUrl)</link>" "<description>$([Security.SecurityElement]::Escape($( if ($site.Description) { $site.Description } else { $site.Title } )))</description>" "<pubDate>$($lastPubDate)</pubDate>" "<lastBuildDate>$($lastBuildTime.ToString('R'))</lastBuildDate>" "<language>$([Security.SecurityElement]::Escape($site.Language))</language>" :nextPage foreach ($keyValue in $pagesByDate) { $key = $keyValue.Key $keyUri = $key -as [Uri] $page = $keyValue.Value if ($site.Disallow) { foreach ($disallow in $site.Disallow) { if ($keyUri.LocalPath -like "*$disallow*") { continue nextPage } if ($keyUri.AbsoluteUri -like "*$disallow*") { continue nextPage } } } if ($site.PagesByUrl[$key].NoIndex) { continue } if ($site.PagesByUrl[$key].NoSitemap) { continue } if ($site.PagesByUrl[$key].OutputFile.Extension -ne '.html') { continue } "<item>" "<title>$([Security.SecurityElement]::Escape($( if ($page.Title) { $page.Title } elseif ($site.Title) { $site.Title } else { $site.CNAME } )))</title>" if ($site.PagesByUrl[$key].Date -is [DateTime]) { "<pubDate>$($site.PagesByUrl[$key].Date.ToString('R'))</pubDate>" } "<description>$([Security.SecurityElement]::Escape($( if ($page.Description) { $page.Description } elseif ($site.Description) { $site.Description } )))</description>" "<link>$key</link>" "<guid isPermaLink='true'>$key</guid>" "</item>" } '</channel>' '</rss>' ) -join ' ' -as [xml] if ($rssXml) { $stringWriter = [IO.StringWriter]::new() $rssXml.Save($stringWriter) "$stringWriter" } } #endregion index.rss |