mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Merge pull request #69 from R0m1k3/claude/update-rss-feeds-011CV6EZDsWAUqbRHZR1117Q
Fix: Augmentation limites récupération articles RSS
This commit is contained in:
2 files changed
+40
-17
No files matched your search
+38
-15
@@ -166,35 +166,58 @@ function invalidateCache() {
|
||||
|
||||
/**
|
||||
* GET /api/rss/articles
|
||||
* Récupérer les articles RSS (avec cache et paramètre limit)
|
||||
* Récupérer les articles RSS (avec cache et paramètres limit et hours)
|
||||
* @query limit - Nombre d'articles à récupérer (défaut: 50)
|
||||
* @query hours - Récupérer uniquement les articles des X dernières heures (défaut: tous)
|
||||
*/
|
||||
router.get('/articles', async (req, res) => {
|
||||
try {
|
||||
const limit = parseInt(req.query.limit) || 5;
|
||||
const limit = parseInt(req.query.limit) || 50; // Augmenté de 5 à 50
|
||||
const hours = parseInt(req.query.hours) || null;
|
||||
|
||||
// Utiliser le cache si disponible et récent
|
||||
const now = Date.now();
|
||||
if (articlesCache && (now - articlesCacheTime) < ARTICLES_CACHE_DURATION) {
|
||||
logger.debug('Articles RSS servis depuis le cache');
|
||||
return res.json(articlesCache.slice(0, limit));
|
||||
}
|
||||
|
||||
const articles = await getAll(`
|
||||
// Construire la requête SQL avec filtre temporel optionnel
|
||||
let query = `
|
||||
SELECT
|
||||
a.id, a.title, a.link, a.description, a.pub_date, a.content,
|
||||
COALESCE(f.title, f.url) as feed_title, f.url as feed_url
|
||||
FROM rss_articles a
|
||||
LEFT JOIN rss_feeds f ON a.feed_id = f.id
|
||||
WHERE a.pub_date IS NOT NULL
|
||||
`;
|
||||
|
||||
const params = [];
|
||||
|
||||
// Ajouter un filtre temporel si spécifié
|
||||
if (hours) {
|
||||
query += ` AND datetime(a.pub_date) >= datetime('now', '-${hours} hours')`;
|
||||
logger.debug(`Filtre appliqué: articles des ${hours} dernières heures`);
|
||||
}
|
||||
|
||||
query += `
|
||||
ORDER BY a.pub_date DESC
|
||||
LIMIT ?
|
||||
`, [limit]);
|
||||
`;
|
||||
params.push(limit);
|
||||
|
||||
// Mettre en cache
|
||||
articlesCache = articles || [];
|
||||
articlesCacheTime = now;
|
||||
// Ne pas utiliser le cache si un filtre temporel est appliqué
|
||||
if (!hours) {
|
||||
// Utiliser le cache si disponible et récent
|
||||
const now = Date.now();
|
||||
if (articlesCache && (now - articlesCacheTime) < ARTICLES_CACHE_DURATION) {
|
||||
logger.debug('Articles RSS servis depuis le cache');
|
||||
return res.json(articlesCache.slice(0, limit));
|
||||
}
|
||||
}
|
||||
|
||||
logger.info(`Articles RSS récupérés: ${articles?.length || 0}`);
|
||||
const articles = await getAll(query, params);
|
||||
|
||||
// Mettre en cache uniquement si pas de filtre temporel
|
||||
if (!hours) {
|
||||
articlesCache = articles || [];
|
||||
articlesCacheTime = Date.now();
|
||||
}
|
||||
|
||||
logger.info(`Articles RSS récupérés: ${articles?.length || 0} (limit: ${limit}${hours ? `, ${hours}h` : ''})`);
|
||||
res.json(articles || []);
|
||||
} catch (error) {
|
||||
logger.error('Erreur lors de la récupération des articles RSS:', error);
|
||||
|
||||
@@ -106,8 +106,8 @@ async function fetchAllFeeds() {
|
||||
[parsedFeed.title || feed.url, parsedFeed.description || '', feed.id]
|
||||
);
|
||||
|
||||
// Ajouter les articles (limiter à 20 par flux pour ne pas surcharger)
|
||||
const items = parsedFeed.items.slice(0, 20);
|
||||
// Ajouter les articles (limiter à 100 par flux pour capturer plus d'articles)
|
||||
const items = parsedFeed.items.slice(0, 100);
|
||||
let feedArticles = 0;
|
||||
|
||||
for (const item of items) {
|
||||
|
||||
Reference in new issue
Block a user