fomoapp
Version:
Get the latest tech news right into your CLI
56 lines (50 loc) • 1.39 kB
JavaScript
const Parser = require("rss-parser")
const { pick } = require("lodash")
const chalk = require("chalk")
const link = require("terminal-link")
const { fallbackLinkFormatter } = require("../utils/link")
const BASE_URL = "https://www.reddit.com/r"
const rssParser = new Parser()
const fetchTypes = {
WEBDEV: "webdev",
TECH: "tech",
PROGRAMMING: "prog",
FRONTEND: "fed",
JAVASCRIPT: "js"
}
const typeToPathMap = {
[fetchTypes.WEBDEV]: "webdev/.rss",
[fetchTypes.TECH]: "technology/.rss",
[fetchTypes.PROGRAMMING]: "programming/.rss",
[fetchTypes.FRONTEND]: "Frontend/.rss",
[fetchTypes.JAVASCRIPT]: "javascript/.rss"
}
async function getStories(numOfStories, type) {
const path = typeToPathMap[type]
const feed = await rssParser.parseURL(`${BASE_URL}/${path}`)
const stories = feed.items
.slice(0, numOfStories)
.map((item) =>
pick(item, [
"title",
"link",
"isoDate",
"author",
"contentSnippet"
])
)
return stories
}
function formatStory(item) {
return `${link(chalk.green.bold(item.title), item.link, {
fallback: fallbackLinkFormatter
})} ${chalk.grey(`(${item.isoDate}, by ${item.author})`)}`
}
module.exports = {
fetchTypes,
defaultFetchType: fetchTypes.WEBDEV,
details: { name: "Reddit", id: "reddit" },
getItems: getStories,
formatter: formatStory,
defaultCacheTTL: 10
}