Ein automatischer RSS-Feed mit Laravel erstellen

Mit Laravel lässt sich relativ einfach ein automatischer RSS-Feed erstellen, hier erkläre ich anhand eines Beispiels wie man dabei vorgeht.

Als Beispiel nehme ich ein Blog mit Blogbeiträgen, die einzige Voraussetzung damit es funktioniert ist das die Beiträge im Blog in einer Datenbank gespeichert werden.

Was ist ein RSS-Feed? Ich habe schonmal ein Beitrag zu diesen Thema geschrieben. Zum Beitrag.

Für ein RSS-Feed braucht man mindestens den Titel des Beitrags, die Beschreibung zum Beitrag und den Link zum Blogbeitrag. Hier findet man die Informationen dazu.

Zwei gute Beiträge zu diesem Thema auf Englisch, es geht zwar um eine Sitemap aber das Prinzip ist das gleiche:

https://laraget.com/blog/generate-a-simple-xml-sitemap-using-laravel

https://laravel-news.com/laravel-sitemap

Zum Beispiel

Ein Blogbeitrag nenne ich article, daher erstelle ich ein Model namens Article und eine Datenbank namens articles:

Die Datenbank:

$table->increments('id');
$table->string('title');
$table->string('slug');
$table->string('description');
$table->string('excerpt');
$table->text('body');
$table->timestamp('published_at');
$table->timestamps();

1. Ich erstelle die Ausgabe für den RSS-Feed

Ich gehe dafür in den Ordner resources\views und erstelle einen neuen Ordner mit den Namen pages.

In diesen Ordner erstelle ich eine neue Datei mit den Namen rss.blade.php.

In die Datei schreibe ich folgenden Code rein:

<?php echo '<?xml version="1.0" encoding="ISO-8859-1"?>'; ?>
<rss version="2.0">
<channel>
<title>Titel des Blogs</title>
<link>Link zur Webseite</link>
<description>Beschreibung des Blogs.</description>
<language>de-de</language>
 
@foreach ($articles as $article)
<item>
<title><![CDATA[ {{ $article->title }} ]]></title>
<description><![CDATA[ {{ $article->description }} ]]></description>
<link>{{ url('/blog', $article->slug) }}</link>
</item>
@endforeach
 
</channel>
</rss>

2. Ich erstelle ein Controller um die Ausgabe vom RSS-Feed zu steuern, es werden nur die letzten 10 Beiträge angezeigt.

Ich gehe dafür in den Ordner app\Http\Controllers und erstelle eine neue Datei mit den Namen PagesController.php.

Wichtig: Oben in der Datei muss man das verwendete Model angeben: use App\Article;

Weitere Informationen: https://laravel.com/docs/5.5/controllers.

In die Datei schreibe ich folgende Funktion rein:

Public function rssFeed()
    {
        $articles = Article::latest('published_at')->take(10)->get();
        
        return response()->view('pages.rss', compact('articles'))->header('Content-Type', 'text/xml');
    }

3. Ich gebe an unter welcher Webadresse der RSS-Feed zu erreichen ist.

Ich gehe dafür in den Ordner routes und öffne die Datei web.php.

In die Datei schreibe ich folgende Codezeile rein:

Route::get('/rss.xml', 'PagesController@rssFeed');

Kommentar eingeben