
ใครที่ใช้ Laravel 5 และกำลังหาวิธีดึง RSS ฟีดมาแสดงที่เว็บของเรา วันนี้ผมขอแนะนำแพคเกจ willvincent/feeds ที่ช่วยให้คุณตอบสนองความต้องการนั้นครับ
ติดตั้ง willvincent/feeds
ใช้คำสั่ง composer require ดาวน์โหลดแพจเกจ willvincent/feeds ลงในโปรเจค Laravel 5 ของเราก่อนครับ
composer require willvincent/feeds
แล้วก็เข้าไปเพิ่ม provider ในไฟล์ config/app.php
'providers' => [
// ...
willvincent\Feeds\FeedsServiceProvider::class,
],
และเพิ่ม faces ลงในส่วนของ aliases ในไฟล์เดียวกัน
'aliases' => [
// ...
'Feeds' => willvincent\Feeds\Facades\FeedsFacade::class,
],
ก่อนใช้งานเราก็ต้องดึง config ของแพคเกจออกมาก่อนครับ
php artisan vendor:publish --provider="willvincent\Feeds\FeedsServiceProvider"
เสร็จแล้วจะไฟล์ config/feeds.php กำเนิดเกิดขึ้น (ถ้าใครไม่ขึ้นหรือรันไม่ผ่านให้ลองรันคำสั่งล้างแคชก่อนนะ php artisan config:cache)
การใช้งานใน Controller
เราจะใช้งานด้วยฟังก์ชั่น make() ซึ่ง 3 พารามิเตอร์
- ลิงค์ของ RSS ถ้ามีหลายลิงค์ให้ใส่เป็น array
- ตัวเลขจำนวนฟีดที่แสดงไม่เกินกี่ฟีด
- บังคับอ่านไฟล์ที่ไม่ถูกรูปแบบ RSS ใส่เป็น Boolean
เริ่มด้วยกันเรียกใช้งานคลาสด้วย faces ที่เราเตรียมไว้ส่วนบนๆ ของ controller เราเลยครับ
... use Feeds;
class FeedsController extends Controller
{ ... }
โค้ดตัวอย่างนี้ เราจะเขียน method สำหรับอ่านข้อมูลจากลิงค์ RSS มาแปลงเป็น array แล้วส่งต่อไปแสดงผลที่ View ครับ
public function news()
{
$feed = Feeds::make('https://www.thaiware.com/rss/rss_latestPost_news.php');
$data = array(
'title' => $feed->get_title(),
'permalink' => $feed->get_permalink(),
'items' => $feed->get_items(),
);
return view('feeds', $data);
}
ในส่วนของ views/feeds.blade.php เราจะลูป Feeds จาก controller มาแสดงครับ
<h1><a href="{{ $permalink }}">{{ $title }}</a></h1>
@foreach ($items as $item)
<div class="item"> <img alt="Image" src="{{ $item->get_enclosure()->link }}"> <h2><a href="{{ $item->get_permalink() }}">{{ $item->get_title() }}</a></h2>
<p>{{ $item->get_description() }}</p>
<p><small>Posted on {{ $item->get_date('j F Y | g:i a') }}</small></p>
</div>
@endforeach
ปล. สามารถดูตัวอย่างผลลัพธ์ของโค้ดด้านบนได้เลยที่หน้า RSS ฟีดของไอเดียจิตอลครับ