ساخت JSON Feed با لاراول 

گردآوری و تالیف : امیررضا سیستانه ای
تاریخ انتشار : 06 بهمن 1396
دسته بندی ها : لاراول

JSON Feed استاندارد جدید برای فرمت بندی کردن یک JSON برپایه ی RSS feed هست که بر ساده سازی ساخت feed ها برای خاتمه دادن به استاندارد XML هست. پیاده سازی یک feed برای سایت سادست. 

یک مثال برای این موضوع :

{
    "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"
        }
    ]
}

این پیاده سازی feed برای یک سایت نمونه هست و شما میتونید نتایجش رو مشاهده کنید. برای مثال بیایید یک feed شبیه این پیاده سازی کنیم.

گرفتن لیستی از پست ها

قدم اول اینه که لیستی از رکورد ها رو از دیتابیس بگیریم. برای این سایت آیتم ها در جدول Posts ذخیره شدند و توسط Eloquent بیست رکورد آخر رو می گیریم :

$posts = Post::limit(20)->get();

پیاده سازی اطلاعات JSON Feed اصلی

JSON Feed مورد نظر شامل فیلدهایی مثل عنوان, URL, آیکون سایت و ... میشه. از اونجایی که اینها داینامیک نیستند من بصورت دستی به یک آرایه اضافه کردم :

$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 آیتم ها

قدم نهایی اینه که بین تمام پست ها loop کنیم و به آرایه ی آیتم هامون اضافه کنیم. این یک مثال با استفاده از اطلاعات ماست :

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
        ],
    ];
}

تنها بخشی که منحصر به فرده time stamps هست. من دارم با استفاده از ویژگی های Carbon به UTC و سپس به فرمت RFC 3339 که از نیازمندی های JSON spec هست, تبدیل می کنم.

نتایج نهایی

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

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;
}

نکته ای که باید توجه داشته باشید اینه که با لاراول ما حتما نباید header خاصی یا هرچیز دیگه ای رو set کنیم. فقط آرایه data$ رو برگردونید و این بصورت خودکار به فرمت JSON تبدیل میشه و header های مورد نیاز بوجود میاد.

اگر شما دوست دارید با استفاده از یک پکیج این کار رو انجام بدید یا دنبال قابلیت های پیشرفته تری می گردید, میتونید پکیج LaravelJsonFeed رو چک کنید.

منبع

مقالات پیشنهادی

نحوه ساخت افزونه مرورگر با vue - بخش اول

در این مقاله، نحوه ساخت یک افزونه ساده Firefox را با استفاده از فریم‌وورک معروف JavaScript، یعنی Vue نشان خواهم داد.

دیباگ کردن اپلیکیشن های لاراولی با لاراول Debugbar

پکیج لاراول دیباگر توسط شخصی به نام Barry vd. Heuvel منتشر شده که به شما اجازه میده خیلی سریع و راحت اطلاعات اپلیکیشن لاراولی خودتون رو در یک رابطه گر...

هک css - ساخت یک Dropdowns تنها با checkbox

در این آموزش سریع ، ما یک نگاه به تنها روش ساخت Dropdowns کردیم بعد تصمصیم گرفتیم به دنبال یک راه دیگه برای ساخت Dropdowns بگردیم که به یک روش هوشمندا...

ساخت یک قالب با الگویی 2 بلوکه

امروز قصد داریم یک قالب ساده با الهام عالی از Dropbox Guide website رو بسازیم . که در دستگاهای با صفحه نمایش بزرگ محتوا به دو ظرف اصلی تقسیم میشود و و...