RSSフィードを作成する機会があったので、@nuxtjs/feedの設定方法を試してみます。
設定方法
以前作成したデモサイトを使って、新着情報の記事をRSSフィードとして表示するように設定してみます
まずはNuxt.jsの環境にインストールします。
yarn add @nuxtjs/feed
npmの場合は下記になります。
npm install @nuxtjs/feed
nuxt.config.jsのmodulesに@nuxtjs/feedの追加と、feedの項目を新しく追加します。
export default {
modules: [
'@nuxtjs/feed'
],
feed: [
// ここにfeedの設定を追加する
]
}
feedの項目に設定を追加します。
const axios = require('axios');
export default {
feed: [
{
path: '/feed.xml', // フィードのパス
async create(feed) { // フィードの内容の設定
// フィードの全体の設定
feed.options = {
title: 'サイト名',
link: 'https://example.com/',
description: '説明文'
}
// フィードに表示する記事の取得
const posts = await axios.get(
process.env.API_URL,
{
headers: {
'X-API-KEY': process.env.API_KEY
}
}
)
// 各記事をフィードに追加
posts.data.contents.forEach(post => {
feed.addItem({
title: post.title,
id: post.id,
link: `https://example.com/info/${post.id}`,
content: post.body
})
})
},
cacheTime: 1000 * 60 * 15, // フィードをキャッシュする期間
type: 'rss2' // フィードの種類を'rss2','atom1','json1' から選択
}
]
}
/feed.xml にアクセスして確認すると、以下のように表示が確認できました。
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>サイト名</title>
<link>https://example.com/</link>
<description>説明文</description>
<lastBuildDate>Mon, 21 Mar 2022 06:56:22 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/nuxt-community/feed-module</generator>
<item>
<title><![CDATA[新着情報F]]></title>
<link>https://example.com/info/z4yk0ox_tqa</link>
<guid>z4yk0ox_tqa</guid>
</item>
<item>
<title><![CDATA[新着情報E]]></title>
<link>https://example.com/info/1hpnqckp0j_i</link>
<guid>1hpnqckp0j_i</guid>
</item>
<item>
<title><![CDATA[新着情報D]]></title>
<link>https://example.com/info/e5evol2afqgv</link>
<guid>e5evol2afqgv</guid>
</item>
<item>
<title><![CDATA[新着情報C]]></title>
<link>https://example.com/info/6irp7tjwo_qj</link>
<guid>6irp7tjwo_qj</guid>
</item>
<item>
<title><![CDATA[新着情報B]]></title>
<link>https://example.com/info/v249mt0p71</link>
<guid>v249mt0p71</guid>
<content:encoded><![CDATA[<p>テストテスト</p>]]></content:encoded>
</item>
<item>
<title><![CDATA[新着情報A]]></title>
<link>https://example.com/info/3hn_7p6e1m</link>
<guid>3hn_7p6e1m</guid>
<content:encoded><![CDATA[<p>新着情報の本文です。<br>テストテストテスト</p>]]></content:encoded>
</item>
</channel>
</rss>
コメントが承認されるまで時間がかかります。