Comment construire votre propre "Google News" en utilisant les flux RSS

Équipe RSSFeedFlowPublié Mise à jour 15 min lire
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.

32Avg. Flux par utilisateur
1,200+Articles traités/Jour
92%Réduction du bruit
4,5 heuresTemps économisé/semaine

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)

L'avantage RSS
Comme nous l'avons indiqué dans notre Analyse du retour RSS, rapport des utilisateurs de RSS 34% satisfaction accrue en matière d'information en cours de 18% moins le temps Construisant votre propre agrégateur amplifie ces avantages en mettant chaque décision entre vos mains.

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
- Lifestyle

Dé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 domain

Haut de page Sources de nouvelles fiables avec RSS

Récipients

Gratuit
Fiabilité: 98%
Bizarre: Centre
CNR : ✅

Presse associée

Gratuit
Fiabilité: 97%
Bizarre: Centre
CNR : ✅

Nouvelles de la BBC

Gratuit
Fiabilité: 95%
Bizarre: Centre-gauche
CNR : ✅

NPR

Gratuit
Fiabilité: 94%
Bizarre: Centre-gauche
CNR : ✅

Le Journal de Wall Street

Payés
Fiabilité: 96%
Bizarre: Centre-droite
CNR : ✅

Les fleurs

Payés
Fiabilité: 97%
Bizarre: Centre
CNR : ✅

TechCrunch

Gratuit
Fiabilité: 89%
Bizarre: Centre
CNR : ✅

Les femmes

Gratuit
Fiabilité: 93%
Bizarre: Centre
CNR : ✅

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

Volume −40 %

Seulement des éditeurs de confiance (fiabilité >85 %)

Couche 2: Correspondance des mots clés

− 35% volume

Inclure: AI, climat, marchés Exclure: célébrité, commérages

Calque 3 : Dédoublement

−25% volume

Histoires similaires de groupe, montrer la meilleure source

Couche 4: Classement AI

20 % de surface supérieure

Score par pertinence, réactivité, importance

Couche 5 : Boucle de rétroaction des utilisateurs

Optimisation continue

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

Optimisation du calendrier de scrutin
Selon les modèles de publication: les commentaires critiques se nourrissent toutes les 15 minutes de 8h à 16h (heure de pointe), toutes les 60 minutes de 16h à 20h et toutes les 240 minutes de nuit.

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 :

SolutionMensuelAnnéeCoûts cachésMeilleur pour
Google News (gratuit)$0$0Confidentialité des données, annoncesLecteurs occasionnels
Pro nourrissicole$8$96Caractéristiques limitées de l'IAUtilisateurs de puissance
Inoreader Pro$6$72Limites tarifaires pour les niveaux libresConscients du budget
RSS Feed Flow$15$180Aucune - prix transparentÉquipes & pros
Auto-hospé (VPS)$25$300Temps d' entretienDéveloppeurs
Plateforme d'entreprise CI$299$3588Verrouillage du contratGrandes 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)

Principales conclusions
Score des agrégateurs RSS personnalisés 47 % plus élevé sur la pertinence du contenu et 243% plus élevé Le compromis: légèrement moins de scores de synchronisation entre les plateformes (85% vs 88%), bien que des outils modernes comme Flux RSS ont presque comblé cet écart.

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égionSources suiviesFiabilitéFlux recommandés
Amérique du Nord24594%Reuters, AP, NPR, WSJ
Europe19892%BBC, Guardian, Euronews, DW
Asie-Pacifique16788%SCMP, Straits Times, Nikkei, ABC
Amérique latine8985%El País, Folha, La Nación
Moyen-Orient et Afrique7682%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

3 Flux

Centre

Reuters, AP, Bloomberg

3 Flux

Centre-droite

WSJ, Financial Times, Economist

3 Flux

9. Automatisation du flux de travail: de la réception à la livraison

Comprendre le pipeline complet vous aide à optimiser chaque étape :

ÉtapeFréquenceDuréeNiveau d'automatisationImpact de la défaillance
Pollution des fluxToutes les 15-60 min2-5s
100%
Articles manquants
Analyse du contenuPar article<1s
100%
Perte de données
DédoublementPar article<1s
100%
Duplicata
Résumé de l'IASur demande3-8s
95%
Pas de résumé
Filtre de mots clésTemps réel<1s
100%
Contenu non pertinent
Alertes d'acheminementDéclencheur<1s
100%
Notifications différées
Conseil Pro : Traitement parallèle
Procéder en parallèle à des étapes indépendantes : tandis que l'IA résume l'article A, la dédoublement peut fonctionner sur l'article B, et le routage d'alerte peut gérer l'article C. Cela réduit la latence de bout en bout de 15 à ~3s par lot d'article.

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

30 min

Examiner la diversité des sources

Ajouter de nouvelles sources dans les catégories/régions sous-représentées

45 min

Mettre à jour les filtres de mots clés

Ajouter des sujets émergents, supprimer les termes obsolètes

20 min

Analyser les paramètres de l'engagement

Identifier les flux à haut rendement/faible rendement à l'aide de données cliqué-performantes

30 min

Sauvegarde de la base de données OPML +

Exporter les abonnements, vérifier l'intégrité de la sauvegarde

15 min

Examiner les performances du modèle AI

Vérifier la qualité du résumé, ajuster les invites si nécessaire

25 min

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.