ایجاد JSON Feed برای RSS در لاراول

۳ خرداد ۱۳۹۶

JSON Feed یک استاندارد رسمی JSON برای خوراک RSS با استاندارد XML می باشد. به مثال زیر توجه کنید:

{
    "version": "https://jsonfeed.org/version/1",
    "title": "My Example Feed",
    "home_page_url": "https://example.org/",
    "feed_url": "https://example.org/feed.json",
    "items": [
        {
            "id": "2",
            "content_text": "This is a second item.",
            "url": "https://example.org/second-item"
        },
        {
            "id": "1",
            "content_html": "<p>Hello, world!</p>",
            "url": "https://example.org/initial-post"
        }
    ]
}
استخراج لیست پست

در وحله اول 20 رکورد آخر جدول posts را واکشی می کنیم:

    $posts = Post::limit(20)->get();
ایجاد داده های اصلی در داده های JSON Feed

JSON FEED در سطح بالایی خود شامل اجزایی مانند title,feed URL,site icon,... می باشد و چون داینامیک نیست بصورت دستی اضافه می کنیم:

$data = [
    'version' => 'https://jsonfeed.org/version/1',
    'title' => 'Laravel News Feed',
    'home_page_url' => 'https://laravel-news.com/',
    'feed_url' => 'https://laravel-news.com/feed/json',
    'icon' => 'https://laravel-news.com/apple-touch-icon.png',
    'favicon' => 'https://laravel-news.com/apple-touch-icon.png',
    'items' => [],
];
اضافه کردن بقیه اجزا JSON FEED

در مرحله آخر داده های جدول posts را در آرایه items می ریزیم. به مثال زیر توجه کنید:

foreach ($posts as $key => $post) {
    $data['items'][$key] = [
        'id' => $post->id,
        'title' => $post->title,
        'url' => 'https://laravel-news.com/'.$post->uri,
        'image' => $post->featured_image,
        'content_html' => $post->parsed_content,
        'date_published' => $post->created_at->tz('UTC')->toRfc3339String(),
        'date_modified' => $post->updated_at->tz('UTC')->toRfc3339String(),
        'author' => [
            'name' => $post->user->name
        ],
    ];
}
داده نهایی

متد نهایی به شکل زیر است:

public function json()
{
    $posts = Post::active()->limit(20)->get();

    $data = [
        'version' => 'https://jsonfeed.org/version/1',
        'title' => 'Laravel News Feed',
        'home_page_url' => 'https://laravel-news.com/',
        'feed_url' => 'https://laravel-news.com/feed/json',
        'icon' => 'https://laravel-news.com/apple-touch-icon.png',
        'favicon' => 'https://laravel-news.com/apple-touch-icon.png',
        'items' => [],
    ];

    foreach ($posts as $key => $post) {
        $data['items'][$key] = [
            'id' => $post->id,
            'title' => $post->title,
            'url' => 'https://laravel-news.com/'.$post->uri,
            'image' => $post->featured_image,
            'content_html' => $post->parsed_content,
            'date_created' => $post->publishes_at->tz('UTC')->toRfc3339String(),
            'date_modified' => $post->updated_at->tz('UTC')->toRfc3339String(),
            'author' => [
                'name' => $post->user->name
            ],
        ];
    }
    return $data;
}

اگر می خواهید از بسته آماده استفاده کنید می توانید از لینک زیر بسته را دانلود کنید:

LaravelJsonFeed

 نویسنده:حمید شاه محمدی
 تعداد مشاهده خبر:(1232)
 هر روز از مقاله های جدید طراحی سایت در کانال تلگرام ما با خبر شوید

 میانگین امتیازات:
 
  تعداد رای دهندگان: {{ count }}
نظرات:

{{ x }}
{{ alert }}

نویسنده:{{ com.name }}
{{ com.body }}
{{ com.created_at }}