mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Correction de l'ordre d'affichage : - Supprime le .reverse() dans loadRssArticles() - Les articles s'affichent maintenant du plus récent au plus ancien - Correspond au comportement standard d'un lecteur RSS Résout le problème où les nouveaux articles (13 nov) étaient à la fin et nécessitaient de paginer jusqu'à la dernière page. Maintenant les articles les plus récents apparaissent en premier. Ajout de scripts utilitaires : - check-rss-dates.js : Vérifie les dates des articles en DB - init-rss-feeds.js : Initialise des flux RSS par défaut - force-refresh-rss.js : Force une mise à jour manuelle
105 lines
3.5 KiB
JavaScript
105 lines
3.5 KiB
JavaScript
// Script pour initialiser des flux RSS par défaut
|
|
const Parser = require('rss-parser');
|
|
const { getAll, runQuery, initDatabase } = require('../config/database');
|
|
const logger = require('../config/logger');
|
|
|
|
const parser = new Parser({
|
|
timeout: 10000,
|
|
headers: {
|
|
'User-Agent': 'NoteFlow RSS Reader'
|
|
}
|
|
});
|
|
|
|
const DEFAULT_FEEDS = [
|
|
'https://news.google.com/rss/search?tbm=nws&q=NBA&oq=NBA&scoring=n&hl=fr&gl=FR&ceid=FR:fr',
|
|
'https://dwh.lequipe.fr/api/edito/rss?path=/Basket/Nba/',
|
|
'https://fresh.vonrodbox.eu/i/?a=rss&user=Michael&token=Lapin2509&hours=168'
|
|
];
|
|
|
|
async function initFeeds() {
|
|
console.log('\n==================== INITIALISATION FLUX RSS ====================\n');
|
|
|
|
try {
|
|
await initDatabase();
|
|
|
|
// Vérifier les flux existants
|
|
const existing = await getAll('SELECT * FROM rss_feeds');
|
|
console.log(`📰 Flux existants: ${existing.length}\n`);
|
|
|
|
for (const url of DEFAULT_FEEDS) {
|
|
try {
|
|
// Vérifier si le flux existe déjà
|
|
const exists = existing.find(f => f.url === url);
|
|
if (exists) {
|
|
console.log(`⏭️ Flux déjà présent: ${exists.title || url}`);
|
|
continue;
|
|
}
|
|
|
|
console.log(`⏳ Ajout du flux: ${url}`);
|
|
|
|
// Parser le flux
|
|
const feed = await parser.parseURL(url);
|
|
|
|
// Ajouter le flux
|
|
const result = await runQuery(
|
|
'INSERT INTO rss_feeds (url, title, description, enabled) VALUES (?, ?, ?, 1)',
|
|
[url, feed.title || url, feed.description || '']
|
|
);
|
|
|
|
console.log(`✅ Flux ajouté: ${feed.title}`);
|
|
console.log(` Articles disponibles: ${feed.items.length}`);
|
|
|
|
// Ajouter les articles (limiter à 100)
|
|
const items = feed.items.slice(0, 100);
|
|
let addedCount = 0;
|
|
|
|
for (const item of items) {
|
|
try {
|
|
if (!item.link) continue;
|
|
|
|
await runQuery(
|
|
'INSERT INTO rss_articles (feed_id, title, link, description, pub_date, content) VALUES (?, ?, ?, ?, ?, ?)',
|
|
[
|
|
result.id,
|
|
item.title || 'Sans titre',
|
|
item.link,
|
|
item.contentSnippet || item.description || '',
|
|
item.pubDate || item.isoDate || new Date().toISOString(),
|
|
item.content || item['content:encoded'] || ''
|
|
]
|
|
);
|
|
addedCount++;
|
|
} catch (err) {
|
|
// Ignorer les doublons
|
|
if (!err.message.includes('UNIQUE')) {
|
|
console.log(` ⚠️ Article ignoré: ${err.message}`);
|
|
}
|
|
}
|
|
}
|
|
|
|
console.log(` Articles ajoutés: ${addedCount}\n`);
|
|
|
|
} catch (error) {
|
|
console.error(`❌ Erreur avec ${url}:`, error.message, '\n');
|
|
}
|
|
}
|
|
|
|
// Résumé final
|
|
const finalFeeds = await getAll('SELECT COUNT(*) as count FROM rss_feeds WHERE enabled = 1');
|
|
const finalArticles = await getAll('SELECT COUNT(*) as count FROM rss_articles');
|
|
|
|
console.log('========================================================');
|
|
console.log(`✅ Initialisation terminée!`);
|
|
console.log(`📰 Flux actifs: ${finalFeeds[0].count}`);
|
|
console.log(`📄 Articles en base: ${finalArticles[0].count}`);
|
|
console.log('========================================================\n');
|
|
|
|
} catch (error) {
|
|
console.error('❌ Erreur lors de l\'initialisation:', error);
|
|
}
|
|
|
|
process.exit(0);
|
|
}
|
|
|
|
initFeeds();
|