Loading...

Membuat RSS Feed di Laravel

Hampir semua orang yang berkecimpung di dunia blog atau yang dikenal sebagai blogger pasti tidak asing dengan yang namanya RSS Feed. Kenapa? Karena RSS Feed ini biasanya ditampilkan pada sebuah halaman website.

RSS Feed muncul dengan warna khasnya yaitu kuning dengan teks “RSS”. Anda sendiri apakah sudah pernah melihat sebuah website yang menggunakan RSS? Saya yakin pasti sudah pernah.

RSS adalah singkatan dari Really Simple Syndication atau Rich Site Summary. Terkadang disebut dengan feed atau RSS feed. RSS adalah tipe web feed yang mengizinkan user dan aplikasi untuk menerima update reguler dari website atau blog yang mereka pilih.

Sebelum kita membuat RSS terlebih dahulu kamu harus sudah mempunyai project di Laravel, untuk membuat project baru bisa dengan perintah berikut:

composer create-project laravel/laravel nama-project

kemudian kamu juga membutuhan model yang akan kamu gunakan. Untuk contoh ini, akan menggunakan model Post, gunakan perintah ini untuk membuat model Post

php artisan make:model Post

Install Package Laravel-Feed

untuk menggunakan package laravel-feed, kita perlu menginstallnya terlebih dahulu melalui composer command.

composer require spatie/laravel-feed

Menambahkan Feed Routes di web.php

/** In web.php */

Route::feeds();

publish config file feed.php

php artisan vendor:publish --provider="Spatie\Feed\FeedServiceProvider" --tag="feed-config"

perintah diatas akan membuat sebuah file di folder config dengan nama feed.php

return [
    'feeds' => [
        'main' => [
            /*
             * Here you can specify which class and method will return
             * the items that should appear in the feed. For example:
             * [App\Model::class, 'getAllFeedItems']
             *
             * You can also pass an argument to that method.  Note that their key must be the name of the parameter:             *
             * [App\Model::class, 'getAllFeedItems', 'parameterName' => 'argument']
             */
            'items' => '',

            /*
             * The feed will be available on this url.
             */
            'url' => '',

            'title' => 'My feed',
            'description' => 'The description of the feed.',
            'language' => 'en-US',

            /*
             * The image to display for the feed.  For Atom feeds, this is displayed as
             * a banner/logo; for RSS and JSON feeds, it's displayed as an icon.
             * An empty value omits the image attribute from the feed.
             */
            'image' => '',

            /*
             * The format of the feed.  Acceptable values are 'rss', 'atom', or 'json'.
             */
            'format' => 'atom',

            /*
             * The view that will render the feed.
             */
            'view' => 'feed::atom',

            /*
             * The mime type to be used in the <link> tag.  Set to an empty string to automatically
             * determine the correct value.
             */
            'type' => '',

            /*
             * The content type for the feed response.  Set to an empty string to automatically
             * determine the correct value.
             */
            'contentType' => '',
        ],
    ],
];

setelah kita mempublish feed.php, langkah selanjutnya adalah meng-generate news feed code untuk model Post yang telah kita buat sebelumnya.

Generate News Feed Code

php artisan make:model NewsItem

sekarang tambahkan code berikut di model NewsItem

<?php

namespace App\Models;

use App\Models\Post;
use Spatie\Feed\Feedable;
use Spatie\Feed\FeedItem;

class NewsItem extends Post implements Feedable
{
    public function toFeedItem(): FeedItem{
        return FeedItem::create(
            [
                'id'=> \URL::to('/post/'.$this->slug),
                'title'=> $this->title,
                'summary'=> $this->post_content,
                'updated'=> $this->updated_at,
                'link'=> \URL::to('/post/'.$this->slug),
                'author'=> $this->author->nickname
            ]
        );
    }

    public static function getFeedItems(){
        return NewsItem::published()->where('post_type','post')
            ->newest()
            ->get();
    }
}

Customize Function config/feed.php

kita juga perlu mengupdate file config/feed.php

'items' => 'App\Models\NewsItem@getFeedItems',
'url' => '/feed',
'title' => 'Jamalapriadi',
'description' => 'The description of the feed',
'language' => 'id',

Penjelasan

  • items - Tempat untuk mendapatkan feed dari class NewsItem
  • Url - alamat dimana feed ini bisa diakses
  • title, descriptiom, language - bisa anda ubah sesuai keingingan anda

Menambahkan Feed Links pada blade template

Langkah terakhir adalah dengan nemanbahkan baris feed ke tag head pada template anda.

@include('feed::links')

anda juga bisa menambahkannya dengan cara berikut:

<link rel="alternate" type="application/atom+xml" title="News" href="/feed">

atau anda bisa menggunakan blade component berikut:

<x-feed-links />

Testing

setelah anda mengikuti tutorial diatas, sekarang anda bisa cek melalui browser kemudian masukkan url http://127.0.0.1:8000/feed, seharusnya anda sudah bisa melihat XML file dari feed web anda.

Share this Post: