forked from ahnafaf/globenews
-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.js
44 lines (36 loc) · 1.27 KB
/
server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
const express = require('express');
const path = require('path');
const axios = require('axios');
const xml2js = require('xml2js');
const app = express();
const port = 3000;
// Serve static files from the current directory
app.use(express.static(__dirname));
// Send index.html for the root route
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'index.html'));
});
// Add a proxy endpoint for fetching news
app.get('/news', async (req, res) => {
const country = req.query.country;
const url = `https://news.google.com/rss/search?q=${encodeURIComponent(country)}&hl=en-US&gl=US&ceid=US:en`;
try {
const response = await axios.get(url);
const parser = new xml2js.Parser({ explicitArray: false, ignoreAttrs: true });
const result = await parser.parseStringPromise(response.data);
const newsItems = result.rss.channel.item.slice(0, 5).map(item => ({
title: item.title,
link: item.link,
snippet: item.description,
source: item.source,
pubDate: item.pubDate
}));
res.json(newsItems);
} catch (error) {
console.error('Error fetching news:', error);
res.status(500).json({ error: 'Error fetching news' });
}
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});