6ews-ggregator-pp
Version:
A news aggregator application that collects and presents news articles from various sources in a unified interface. It offers customizable filters, real-time updates, and a user-friendly reading experience.
86 lines (73 loc) • 2.97 kB
JavaScript
const express = require('express');
const axios = require('axios');
const app = express();
// Middleware setup
app.use(express.json());
// Database simulation
let newsDatabase = [
{
id: 1,
title: 'Breaking News: Global Summit on Climate Change Concludes',
category: 'Environment',
content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget consectetur libero, ac vestibulum velit. Nulla facilisi. Suspendisse potenti. Cras aliquet fermentum nunc, sed tristique quam rhoncus sit amet. Mauris ultrices augue in consequat gravida.',
source: 'Global News Network',
publishedAt: new Date().toISOString(),
},
{
id: 2,
title: 'Tech Giants Announce Partnership for AI Research',
category: 'Technology',
content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget consectetur libero, ac vestibulum velit. Nulla facilisi. Suspendisse potenti. Cras aliquet fermentum nunc, sed tristique quam rhoncus sit amet. Mauris ultrices augue in consequat gravida.',
source: 'Tech Innovate',
publishedAt: new Date().toISOString(),
},
{
id: 3,
title: 'Finance Update: Stock Market Hits Record High',
category: 'Finance',
content: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eget consectetur libero, ac vestibulum velit. Nulla facilisi. Suspendisse potenti. Cras aliquet fermentum nunc, sed tristique quam rhoncus sit amet. Mauris ultrices augue in consequat gravida.',
source: 'Financial Times',
publishedAt: new Date().toISOString(),
},
];
// Routes
app.get('/', (req, res) => {
res.send('Welcome to our sophisticated news aggregator!');
});
app.get('/news', async (req, res) => {
try {
const news = await fetchNewsFromAPI();
// Apply advanced filtering, sorting, or other operations as needed
const filteredNews = applyFilters(news, req.query);
// Simulate real-time updates with a delay
setTimeout(() => {
res.json(filteredNews);
}, 3000);
} catch (error) {
console.error('Error fetching news:', error);
res.status(500).json({ error: 'Failed to fetch news' });
}
});
// Function to fetch news from an external API (simulated)
async function fetchNewsFromAPI() {
const response = await axios.get('https://api.newsapi.com/v2/news');
return response.data;
}
// Function to apply advanced filters
function applyFilters(news, filters) {
let filteredNews = [...news];
// Apply category filter if provided
if (filters.category) {
filteredNews = filteredNews.filter(item => item.category === filters.category);
}
// Apply source filter if provided
if (filters.source) {
filteredNews = filteredNews.filter(item => item.source === filters.source);
}
return filteredNews;
}
// Start the server
const port = 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});