published() ->orderByDesc('published_at') ->limit(config('news.rss_limit', 25)) ->get(); $xml = $this->buildRss($articles); return response($xml, 200, [ 'Content-Type' => 'application/rss+xml; charset=UTF-8', ]); } private function buildRss($articles): string { $siteUrl = config('app.url'); $title = e(config('news.rss_title', 'News')); $description = e(config('news.rss_description', 'Latest news.')); $now = now()->toRfc2822String(); $items = ''; foreach ($articles as $article) { $link = e(url('/news/' . $article->slug)); $pubDate = $article->published_at?->toRfc2822String() ?? $now; $articleTitle = e($article->title); $excerpt = e(strip_tags((string) ($article->excerpt ?? ''))); $category = e((string) ($article->category?->name ?? '')); $author = e((string) ($article->author?->name ?? '')); $items .= << <![CDATA[{$articleTitle}]]> {$link} {$link} {$pubDate} {$author} {$category} ITEM; } return << {$title} {$siteUrl}/news {$description} en-us {$now} {$items} XML; } }