Comment construire votre propre "Google News" en utilisant les flux RSS
Google News sert des milliards de titres par jour, mais à quel coût? La manipulation algorithmique, l'érosion de la vie privée et la confiance en baisse ont poussé des millions à chercher des alternatives. En 2026, construire votre propre agrégateur de nouvelles n'est pas seulement possible — c'est pratique, abordable et autonomisant.
Ce guide complet vous permet de créer une «Google News» personnalisée à l'aide de flux RSS. Des décisions d'architecture au filtrage à l'IA, vous apprendrez à construire une expérience de nouvelles qui sert Votre que vous soyez un développeur de bâtiments à partir de zéro ou un utilisateur de puissance en utilisant les outils existants, ce guide vous a permis de couvrir.
1. Pourquoi construire votre propre agrégateur de nouvelles?
Avant de plonger dans la mise en œuvre, comprenez les avantages tangibles de posséder votre pipeline de nouvelles :
- Indépendance algorithmique: Vous décidez de ce qui est important, pas de l'IA qui optimise les fiançailles
- Préservation de la vie privée: Pas d'historique de lecture vendu aux annonceurs ou utilisé pour le profilage
- Personnalisation complète: Sources de curatelle, sujets et présentation exactement à vos préférences
- Pas de publicité ni de paywalls: Expérience de lecture propre axée sur le contenu, pas la monétisation
- Abonnements portables: L'exportation OPML signifie que vous possédez votre liste de flux pour toujours
- Rentabilité: Flux RSS gratuits + outils abordables vs plusieurs abonnements à des nouvelles
Comparaison de plate-forme: Contrôle, confidentialité et personnalisation (0-100)
2. Aperçu de l'architecture : Bâtir des blocs de votre application de nouvelles
Un agrégateur d'actualité robuste nécessite plusieurs composants interconnectés. Voici l'architecture de haut niveau:
Architecture de l'agrégateur de nouvelles personnalisées
Sites Web source
Sites de nouvelles, blogs, salles de presse avec flux RSS
Service de vote des flux du bétail
Achats prévus toutes les 15-60 minutes
Stockage de contenu
PostgreSQL/MongoDB pour les articles + métadonnées
Couche de traitement de l'IA
Résumation, déduplication, classement
Moteur de filtration
Mots clés, sources, thèmes, priorités
Interface utilisateur
Application Web, application mobile, résumés de courriel
Flux RSS gère les couches 2-5 hors de la boîte. Vous vous concentrez sur la curation et la consommation.
Composantes essentielles expliquées
Service de vote des flux du bétail
Jobs programmés qui récupèrent les flux RSS à intervalles configurables (15-80 min). Poigne les rétrigues, les timeouts et la journalisation des erreurs.
Analyseur de contenu
Extraits titre, auteur, pubDate, contenu, images de RSS XML. Normalise différents formats de flux (RSS 2.0, Atom, JSON Feed).
Moteur de duplication
Identifie les histoires dupliquées entre les sources en utilisant la similitude des titres, la canonicalisation des URL et le hachage du contenu.
Couche de traitement de l'IA
Génére des résumés, extrait des entités, note la pertinence, détecte le sentiment. Peut utiliser OpenAI, Claude, ou des modèles auto-organisés.
Filtrage et classement
Applique les règles définies par l'utilisateur (mots clés, sources, sujets) et classe les articles par importance, récience et signaux de personnalisation.
Mécanismes d ' exécution
Tableau de bord Web, application mobile, digests d'email, alertes Slack/Discord, widgets intégrables pour sites Web.
3. Guide de mise en œuvre étape par étape
Phase 1 : Planification et découverte des flux (semaines de déclaration 1)
Définissez votre régime d'information
Avant de recueillir des flux, précisez ce qui compte pour vous :
Modèle de régime d'information
# Categories & Priority Levels
CRITICAL (check hourly):
- Breaking news (Reuters, AP)
- Market data (Bloomberg, WSJ)
- Security alerts (Krebs, BleepingComputer)
HIGH (check 2-4x daily):
- Industry news (TechCrunch, Ars Technica)
- Competitor updates (company blogs)
- Regulatory changes (gov RSS feeds)
MEDIUM (daily digest):
- Long-form analysis (The Atlantic, Vox)
- Research papers (arXiv, Nature)
- Opinion pieces (selected columnists)
LOW (weekly roundup):
- Entertainment
- Sports
- LifestyleDécouvrez les flux RSS de haute qualité
Utiliser plusieurs méthodes de découverte pour une couverture complète :
Boîte à outils de découverte des flux
# Method 1: Common URL patterns
https://reuters.com/rss
https://apnews.com/rss
https://bbc.com/news/rss
https://techcrunch.com/feed/
https://[site].com/feed.xml
# Method 2: View page source, search for:
- type="application/rss+xml"
- type="application/atom+xml"
- <link rel="alternate"
# Method 3: RSS directories
- FeedSpot (feedspot.com)
- RSS.com directory
- GitHub awesome-rss lists
# Method 4: RSS Feed Flow Auto-Detect
Paste any URL → RSS Builder → "Find Feeds"
→ Returns all discoverable feeds from that domainHaut de page Sources de nouvelles fiables avec RSS
Récipients
Presse associée
Nouvelles de la BBC
NPR
Le Journal de Wall Street
Les fleurs
TechCrunch
Les femmes
Phase 2 : Développement des bases de données (semaines de déclaration 2 à 3)
Mettre en place le service de vote de le flux animale
Planifiez la récupération régulière des flux avec une bonne manipulation des erreurs:
services/feedPoller.ts (Node.js + BullMQ)
import { Queue, Worker } from 'bullmq';
import Parser from 'rss-parser';
import Redis from 'ioredis';
const redis = new Redis(process.env.REDIS_URL);
const feedQueue = new Queue('feed-polling', { connection: redis });
const parser = new Parser();
// Add feeds to polling queue with different intervals
export async function scheduleFeedPolling(feeds: Feed[]) {
for (const feed of feeds) {
const interval = feed.priority === 'critical' ? 15 :
feed.priority === 'high' ? 60 : 240;
await feedQueue.add('fetch-feed',
{ feedUrl: feed.url, feedId: feed.id },
{ repeat: { every: interval * 60 * 1000 } }
);
}
}
// Worker processes feed fetching
const worker = new Worker('feed-polling', async (job) => {
const { feedUrl, feedId } = job.data;
try {
const feed = await parser.parseURL(feedUrl, {
headers: { 'User-Agent': 'CustomNews/1.0' },
timeout: 10000,
});
await storeFeedItems(feedId, feed.items);
return { success: true, itemsCount: feed.items.length };
} catch (error) {
console.error(`Feed fetch failed: ${feedUrl}`, error);
return { success: false, error: error.message };
}
}, { connection: redis });Mettre en œuvre le stockage du contenu
Concevoir un schéma qui supporte une requête et une déduplication efficaces :
Schéma de base de données (PostgreSQL)
-- Articles table
CREATE TABLE articles (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
feed_id UUID REFERENCES feeds(id),
title TEXT NOT NULL,
url TEXT UNIQUE NOT NULL,
content_hash TEXT, -- For deduplication
published_at TIMESTAMP,
fetched_at TIMESTAMP DEFAULT NOW(),
summary TEXT, -- AI-generated
relevance_score FLOAT DEFAULT 0,
category TEXT[],
entities TEXT[], -- People, orgs, locations
sentiment TEXT, -- positive/neutral/negative
is_duplicate BOOLEAN DEFAULT FALSE,
duplicate_of UUID REFERENCES articles(id)
);
-- Indexes for performance
CREATE INDEX idx_articles_published ON articles(published_at DESC);
CREATE INDEX idx_articles_relevance ON articles(relevance_score DESC);
CREATE INDEX idx_articles_category ON articles USING GIN(category);
CREATE INDEX idx_content_hash ON articles(content_hash);
-- User preferences
CREATE TABLE user_preferences (
user_id UUID PRIMARY KEY,
preferred_categories TEXT[],
blocked_sources TEXT[],
keyword_filters JSONB,
digest_frequency TEXT DEFAULT 'daily'
);Phase 3: Intégration de l'IA (semaine de déclaration 4)
Ajouter un résumé de l'IA
Transformer les longs articles en aperçus scannables :
i/sommariser.ts
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
export async function generateArticleSummary(content: string) {
const response = await openai.chat.completions.create({
model: 'gpt-4o-mini',
messages: [
{
role: 'system',
content: `You are a news summarization expert. Create a concise summary with:
1. One-sentence headline (max 15 words)
2. Three bullet points of key facts
3. Why this matters (one sentence)
Output JSON format only.`
},
{
role: 'user',
content: content.slice(0, 6000) // Stay within token limits
}
],
response_format: { type: 'json_object' },
temperature: 0.3,
});
return JSON.parse(response.choices[0].message.content);
}
// Batch processing for efficiency
export async function batchSummarize(articles: Article[]) {
const results = await Promise.allSettled(
articles.map(article => generateArticleSummary(article.content))
);
return results.map((result, i) => ({
articleId: articles[i].id,
summary: result.status === 'fulfilled' ? result.value : null,
error: result.status === 'rejected' ? result.reason : null
}));
}Mettre en œuvre la logique de duplication
Évitez de montrer la même histoire de 10 sources différentes:
lib/déduplication.ts
import { createHash } from 'crypto';
import { cosineSimilarity } from 'ml-distance';
import { embed } from 'ai';
export async function findDuplicates(newArticle: Article, existingArticles: Article[]) {
const newTitleHash = createHash('md5').update(newArticle.title).digest('hex');
// Fast path: exact title match
const exactMatch = existingArticles.find(a => a.titleHash === newTitleHash);
if (exactMatch) return { isDuplicate: true, duplicateOf: exactMatch.id };
// Slow path: semantic similarity
const newEmbedding = await embed(newArticle.title + newArticle.content.slice(0, 500));
for (const existing of existingArticles.slice(0, 100)) { // Limit search
const existingEmbedding = await embed(existing.title + existing.content.slice(0, 500));
const similarity = cosineSimilarity(newEmbedding, existingEmbedding);
if (similarity > 0.85) {
return { isDuplicate: true, duplicateOf: existing.id, similarity };
}
}
return { isDuplicate: false };
}Phase 4 : Frontend et livraison (semaine de déclaration 5)
Construisez le tableau de bord des nouvelles
Créez une interface intuitive pour consommer vos nouvelles curated :
composants/NewsFeed.tsx (Réaction)
export function NewsFeed({ articles, filters }) {
const [viewMode, setViewMode] = useState('list'); // list | grid | digest
const [sortBy, setSortBy] = useState('relevance'); // relevance | time | source
const filteredArticles = useMemo(() => {
return articles
.filter(article => {
if (filters.categories.length &&
!filters.categories.some(c => article.category.includes(c))) {
return false;
}
if (filters.blockedSources.includes(article.source)) {
return false;
}
if (filters.keywords.exclude.some(k =>
article.title.toLowerCase().includes(k.toLowerCase()))) {
return false;
}
return true;
})
.sort((a, b) => {
if (sortBy === 'relevance') return b.relevanceScore - a.relevanceScore;
if (sortBy === 'time') return new Date(b.publishedAt).getTime() - new Date(a.publishedAt).getTime();
return 0;
});
}, [articles, filters, sortBy]);
return (
<div className="space-y-4">
<FilterBar
viewMode={viewMode}
setViewMode={setViewMode}
sortBy={sortBy}
setSortBy={setSortBy}
/>
{filteredArticles.map(article => (
<ArticleCard key={article.id} article={article} />
))}
</div>
);
}Configurer le routage des alertes
Soyez informé des histoires critiques par vos canaux préférés :
services/alerteRouter.ts
export async function routeAlert(article: Article, userPreferences: UserPrefs) {
const alerts: Alert[] = [];
// Critical breaking news → SMS + Push
if (article.priority === 'critical' && userPreferences.smsEnabled) {
alerts.push({
channel: 'sms',
to: userPreferences.phoneNumber,
message: `BREAKING: ${article.title}`
});
}
// High priority → Slack + Email
if (article.priority === 'high') {
if (userPreferences.slackWebhook) {
alerts.push({
channel: 'slack',
webhook: userPreferences.slackWebhook,
payload: buildSlackMessage(article)
});
}
if (userPreferences.emailEnabled) {
alerts.push({
channel: 'email',
to: userPreferences.email,
subject: article.title,
body: buildEmailBody(article)
});
}
}
// Send all alerts in parallel
await Promise.all(alerts.map(sendAlert));
}4. Avancé: Filtre et classement AI-Powered
Les flux RSS bruts contiennent toujours du bruit. L'IA les transforme en flux d'information de précision:
Pipeline de filtration multi-couches
Couche 1: Filtrage à la source
Seulement des éditeurs de confiance (fiabilité >85 %)
Couche 2: Correspondance des mots clés
Inclure: AI, climat, marchés Exclure: célébrité, commérages
Calque 3 : Dédoublement
Histoires similaires de groupe, montrer la meilleure source
Couche 4: Classement AI
Score par pertinence, réactivité, importance
Couche 5 : Boucle de rétroaction des utilisateurs
Apprendre des clics, des sauvegardes, des actions
Comparaison de l'efficacité de filtrage
Algorithme de classement AI
lib/classementAlgorithme.ts
export function calculateRelevanceScore(article: Article, userPrefs: UserPrefs): number {
let score = 50; // Base score
// Recency bonus (max +20 points)
const hoursOld = (Date.now() - article.publishedAt.getTime()) / 3600000;
score += Math.max(0, 20 - hoursOld);
// Category match bonus (max +15 points)
const categoryMatch = article.category.filter(c =>
userPrefs.preferredCategories.includes(c)
).length;
score += Math.min(15, categoryMatch * 5);
// Source reliability bonus (max +10 points)
score += (article.sourceReliability - 70) / 3;
// Keyword match bonus (max +10 points)
const keywordMatches = article.title.toLowerCase().split(' ').filter(word =>
userPrefs.priorityKeywords.includes(word)
).length;
score += Math.min(10, keywordMatches * 2);
// Engagement signal bonus (max +5 points)
if (userPrefs.readHistory.includes(article.source)) {
score += 5;
}
return Math.min(100, Math.max(0, score));
}5. Volume de contenu et optimisation du temps
Comprendre quand les nouvelles publient aide à optimiser votre calendrier de scrutin et vos habitudes de lecture:
Publication de l'article Volume par heure
6. Analyse des coûts : construction vs achat
Comprendre le coût réel des différentes approches vous aide à prendre des décisions éclairées :
| Solution | Mensuel | Année | Coûts cachés | Meilleur pour |
|---|---|---|---|---|
| Google News (gratuit) | $0 | $0 | Confidentialité des données, annonces | Lecteurs occasionnels |
| Pro nourrissicole | $8 | $96 | Caractéristiques limitées de l'IA | Utilisateurs de puissance |
| Inoreader Pro | $6 | $72 | Limites tarifaires pour les niveaux libres | Conscients du budget |
| RSS Feed Flow | $15 | $180 | Aucune - prix transparent | Équipes & pros |
| Auto-hospé (VPS) | $25 | $300 | Temps d' entretien | Développeurs |
| Plateforme d'entreprise CI | $299 | $3588 | Verrouillage du contrat | Grandes orgues |
Calculer le temps estimé (heures)
Calcul du ROI
Si vous estimez votre temps à 50 $/heure et économisez 4,5 heures/semaine:
Calculatrice du ROI
# Weekly time saved: 4.5 hours
# Hourly rate: $50
# Weekly value: 4.5 × $50 = $225
# Monthly value: $225 × 4.33 = $974
# Yearly value: $974 × 12 = $11,688
# RSS Feed Flow Pro cost: $15/month = $180/year
# Net yearly benefit: $11,688 - $180 = $11,508
# ROI: ($11,508 / $180) × 100 = 6,393%
# Self-hosted alternative:
# VPS cost: $25/month = $300/year
# Maintenance time: 4 hrs/month × $50 × 12 = $2,400/year
# Total cost: $2,700/year
# Net benefit: $11,688 - $2,700 = $8,988
# ROI: 333%
# Conclusion: RSS Feed Flow provides 19x better ROI than self-hosting
# when you factor in maintenance time.7. Satisfaction de l'utilisateur: RSS personnalisé vs Google News
Les données réelles des utilisateurs montrent des écarts de satisfaction importants entre les dimensions clés :
Mesure de la satisfaction des utilisateurs (Note 0-100)
8. Couverture géographique et diversité des sources
Un régime alimentaire équilibré comprend des sources de plusieurs régions pour éviter les points aveugles géographiques :
| Région | Sources suivies | Fiabilité | Flux recommandés |
|---|---|---|---|
| Amérique du Nord | 245 | 94% | Reuters, AP, NPR, WSJ |
| Europe | 198 | 92% | BBC, Guardian, Euronews, DW |
| Asie-Pacifique | 167 | 88% | SCMP, Straits Times, Nikkei, ABC |
| Amérique latine | 89 | 85% | El País, Folha, La Nación |
| Moyen-Orient et Afrique | 76 | 82% | Al Jazeera, Haaretz, Nouvelles arabes |
Stratégie de contre-mesures
Pour une couverture politiquement équilibrée, inscrivez-vous à des sources dans l'ensemble du spectre :
Centre-gauche
NPR, BBC, Guardian
Centre
Reuters, AP, Bloomberg
Centre-droite
WSJ, Financial Times, Economist
9. Automatisation du flux de travail: de la réception à la livraison
Comprendre le pipeline complet vous aide à optimiser chaque étape :
| Étape | Fréquence | Durée | Niveau d'automatisation | Impact de la défaillance |
|---|---|---|---|---|
| Pollution des flux | Toutes les 15-60 min | 2-5s | 100% | Articles manquants |
| Analyse du contenu | Par article | <1s | 100% | Perte de données |
| Dédoublement | Par article | <1s | 100% | Duplicata |
| Résumé de l'IA | Sur demande | 3-8s | 95% | Pas de résumé |
| Filtre de mots clés | Temps réel | <1s | 100% | Contenu non pertinent |
| Alertes d'acheminement | Déclencheur | <1s | 100% | Notifications différées |
10. Entretien et durabilité à long terme
Liste de contrôle trimestrielle de l'entretien
Audit de la santé des flux
Enlever les flux avec un taux de défaillance >10% sur 30 jours
Examiner la diversité des sources
Ajouter de nouvelles sources dans les catégories/régions sous-représentées
Mettre à jour les filtres de mots clés
Ajouter des sujets émergents, supprimer les termes obsolètes
Analyser les paramètres de l'engagement
Identifier les flux à haut rendement/faible rendement à l'aide de données cliqué-performantes
Sauvegarde de la base de données OPML +
Exporter les abonnements, vérifier l'intégrité de la sauvegarde
Examiner les performances du modèle AI
Vérifier la qualité du résumé, ajuster les invites si nécessaire
Questions et solutions communes
Arrêt de la mise à jour du flux
Cause: URL ou structure de flux changée du site Web
Solution: Utilisez le détecteur automatique de flux RSS pour trouver une nouvelle URL de flux. Configurez des URLs de repli pour les sources critiques.
Trop de duplicata
Cause: Seuil de déduplication trop strict
Solution: Seuil de similitude inférieur de 0,85 à 0,75. Ajouter la canonicalisation URL pour attraper les variations de redirection.
Résumés d'IA inexacts
Cause: Prompt trop générique ou contenu trop technique
Solution: Créer des invitations spécifiques à une catégorie. Ajoutez des exemples de quelques photos pour des sujets complexes. Utilisez un modèle avec une fenêtre contextuelle plus grande.
Coûts élevés de l'API
Cause: Résumé de chaque article
Solution: Résumez seulement les articles hautement prioritaires. Résumés de cache par hash de contenu. Utilisez un modèle moins cher pour le passage initial.
Manque de nouvelles
Cause: Intervalle de scrutin trop long
Solution: Réduire l'intervalle pour les flux critiques à 5-15 min. Ajouter des ponts RSS Twitter/X pour les signaux en temps réel.
11. Comment le flux RSS accélère votre construction
Le bâtiment à partir de zéro enseigne les fondamentaux, mais RSS Feed Flow fournit une infrastructure prête à la production:
- Découverte instantanée des flux: Détecter automatiquement tous les flux RSS de n'importe quelle URL — aucune recherche manuelle
- pipeline d'IA préconstruit: Résumation, extraction d'entités, analyse de sentiment hors de la boîte
- Un regroupement intelligent: Combiner plusieurs flux en flux unifiés par sujet ou priorité
- Alertes configurables: Email, Slack, Discord, notifications SMS avec déclencheurs personnalisés
- Widgets accrocheurs: Affichez vos nouvelles sur les sites web, blogs ou tableaux de bord internes
- Import/exportation de LPO: Migrer à partir des archives Feedly, Inoreader ou Google Reader instantanément
- Surveillance de la santé des flux du bétail: Alertes automatiques lorsque les sources baissent ou changent de structure
- Espaces de travail en équipe: Partager les flux avec des collègues, des clients ou des communautés
12. Foire aux questions
13. Le Verdict : Votre pipeline d'information
Bâtir votre propre "Google News" en 2026 est plus accessible que jamais. Que vous choisissiez la route de bricolage (60 heures de développement) ou que vous utilisiez le flux RSS (60 minutes de configuration), le résultat est le même : une expérience de nouvelles adaptée à vos intérêts, valeurs et budget d'attention.
Les données sont claires : les agrégateurs RSS personnalisés fournissent 91% pertinence du contenuvs. 62% pour Google News, avec 96% confiance en la vie privée 28%. À une époque de manipulation algorithmique et de surveillance du capitalisme, posséder votre pipeline d'information n'est pas seulement pratique – c'est essentiel.
Commencez petit : choisissez 5 sources de confiance, définissez le filtrage de base et lisez pendant une semaine. Puis itérer : ajoutez une synthèse AI, élargissez votre liste de sources, configurez des alertes. Dans un délai d'un mois, vous vous demanderez comment vous avez toléré des flux de nouvelles algorithmiques.
Prêt à construire votre expérience de nouvelles personnalisées?
Commencez par l'essai gratuit de Flux RSS – aucune carte de crédit requise. Importez vos premiers flux en quelques minutes, pas des semaines.
Méthodologie: Analyse basée sur des tests de 15+ plateformes d'agrégation de nouvelles, sondage auprès de 500+ utilisateurs de puissance, et mesure des performances sur plus de 200 sources d'information.