javascript - 如何通过 .isoDate 对 RSS 提要进行排序并保持提要的内容连接(标题和链接)?
问题描述
我想按最近的项目对 RSS 提要进行排序,并保持项目的标题与其相应的链接匹配。这是我解析和显示提要的方式。我认为最好的属性是 .isoDate,但我不确定如何进行此过程。
我只需将 item.isoDate + item.title 推入一个数组并对其进行排序,然后对 item.isoDate + item.link 的数组执行相同的操作,就可以让它工作。然而,这是一种快速的解决方法,并不总是适用于较大的提要。
function MarinersFeed() {
const [disable, setDisable] = React.useState(false);
const [completeFeed, setCompletedFeed] = React.useState([]);
const [feedTitle, setFeedTitle] = React.useState([]);
const [feedLink, setFeedLink] = React.useState([]);
React.useEffect(async () => {
let Parser = require('rss-parser');
let parser = new Parser();
const tFeed = [];
const tFeedTitle = [];
const tFeedLink = []
let feed = await parser.parseURL('https:*******.herokuapp.com/https://www.mlb.com/mariners/feeds/news/rss.xml');
feed.items.forEach(item => {
//sort by using item.isoDate, keep item.title and item.link connected
tFeed.push(item.title);
tFeedLink.push( item.link);
});
setCompletedFeed(tFeed);
//setFeedTitle(tFeedTitle);
setFeedLink(tFeedLink);
}, []);
const renderData = () => {
return completeFeed.map((f, index) => {
const title = feedTitle[index];
const link = feedLink[index]
const fullFeed = completeFeed[index]
return <div key={index} >
<h3>{fullFeed}
<Button onClick={(e) => {
e.preventDefault();
console.log(link)
window.open(link, "_blank")
}}></Button></h3>
</div>
})
}
return(
<>
{renderData()}
</>
)
}
export default MarinersFeed;
解决方案
您可以使用数组排序方法,例如
const RssParser = require('rss-parser');
async function fetchRss({ url, sort = false, sortOrder = 'desc' } = {}) {
const rssParser = new RssParser();
const feed = await rssParser.parseURL(url);
if (sort) {
feed.items.sort((a, b) => {
return sortOrder === 'asc'
? new Date(a.isoDate) - new Date(b.isoDate) // Oldest first
: new Date(b.isoDate) - new Date(a.isoDate); // Newest first
});
}
return feed;
}
async function main() {
const output = await fetchRss({ url: 'https://www.mlb.com/mariners/feeds/news/rss.xml', sort: true });
console.log(output);
}
main();
输出:
{
items: [
{
creator: 'Jim Callis, Sam Dykstra and Jonathan Mayo',
title: '30 AFL sleeper prospects -- 1 for each org.',
link: 'https://www.mlb.com/mariners/news/sleeper-prospects-in-arizona-fall-league-2021',
pubDate: 'Fri, 15 Oct 2021 01:46:57 GMT',
'dc:creator': 'Jim Callis, Sam Dykstra and Jonathan Mayo',
guid: 'https://www.mlb.com/mariners/news/sleeper-prospects-in-arizona-fall-league-2021',
isoDate: '2021-10-15T01:46:57.000Z'
},
{
creator: 'Daniel Kramer',
title: 'J-Rod launches his own YouTube channel',
link: 'https://www.mlb.com/mariners/news/julio-rodriguez-mariners-top-prospect-launching-youtube-channel',
pubDate: 'Thu, 14 Oct 2021 14:31:30 GMT',
'dc:creator': 'Daniel Kramer',
guid: 'https://www.mlb.com/mariners/news/julio-rodriguez-mariners-top-prospect-launching-youtube-channel',
isoDate: '2021-10-14T14:31:30.000Z'
},
...
推荐阅读
- mysql - 检查用户是否存在 node.js mysql
- r - 如何以防止跨越世界地图的方式分割构造板块边界多边形?
- django - ajax 表单提交代码有问题
- node.js - Discord.JS member.voice 未定义
- javascript - 如何在Javascript中用双反斜杠替换单反斜杠
- ruby-on-rails - 如何将数据中的值从“是”和“否”更改为其他数据在rails中确认
- swift - 快速将用户数据保存到 Firebase 时出错
- node.js - 不使用 jest-mongodb 预设运行的 Jest 测试
- python - 数据类型 intp 有什么用?
- python - 在 Python 中,我们可以在列表、元组、集合、字典等数据结构上使用位运算符吗?如果是这样,为什么?