Como construir seu próprio "Google News" usando feeds RSS
O Google News serve bilhões de manchetes diariamente, mas a que custo?
Este guia abrangente te guia através da criação de um personalizado "Google News" usando feeds RSS. Seu Não é publicidade, não é métrica de engajamento, seja você um construtor do zero ou um usuário poderoso que usa ferramentas existentes, este guia tem você coberto.
Por que construir seu próprio agregador de notícias?
Antes de mergulhar na implementação, entenda os benefícios tangíveis de possuir seu oleoduto de notícias:
- Independência AlgorítmicaVocê decide o que é importante, não a IA otimista de noivado.
- Preservação de privacidade.Nenhuma história de leitura vendida para anunciantes ou usada para perfis.
- Personalização completa.Curar fontes, tópicos e apresentação exatamente às suas preferências.
- Sem anúncios ou paywallsExperiência de leitura limpa focada em conteúdo, não monetização
- Assinaturas portáteis.Exportação OPML significa que você é dono de sua lista de alimentação para sempre.
- Eficiência de custoFeeds grátis do RSS + ferramentas acessíveis vs. múltiplas assinaturas de notícias
Comparação da plataforma: controle, privacidade e personalização (0-100)
2. Visão geral da arquitetura: Construindo Blocos de sua aplicação de notícias
Um agregador de notícias robusto requer vários componentes interconectados.
Notícias personalizadas Arquitetura Agregadora
Páginas Web de origem
Sites de notícias, blogs, salas de imprensa com feeds RSS
Serviço de Pesquisa de Alimentação
A cada 15-60 minutos.
Armazenamento de Conteúdo
PostgreSQL/MongoDB para artigos + metadados
AI Processando Camada
Resumição, deduplicação, classificação
Motor de Filtragem
Palavras-chave, fontes, tópicos, prioridades.
Interface do usuário
Aplicativo da Web, aplicativo móvel, e-mail digere
RSS Feed Flow cuida das camadas 2-5 fora da caixa.
Componentes Principais explicados
Serviço de Pesquisa de Alimentação
Trabalhos agendados que buscam feeds RSS em intervalos configuráveis (15-80 min).
Parser de Conteúdo
Extrai título, autor, pubData, conteúdo, imagens do XML RSS. Normaliza diferentes formatos de alimentação (RSS 2.0, Atom, JSON Feed).
Motor de Desduplicação
Identifica histórias duplicadas em fontes usando similaridade de título, canonicalização de URLs e hashing de conteúdo.
AI Processando Camada
Gera resumos, extrai entidades, pontua relevância, detecta sentimentos, pode usar OpenAI, Claude, ou modelos auto-anfitriões.
Filtrando e ranking
Aplica regras definidas pelo usuário (palavras-chave, fontes, tópicos) e classifica os artigos por importância, reciência e sinais de personalização.
Mecanismos de entrega
Painel web, aplicativo móvel, e-mail digere, alertas Slack/Discord, widgets incorporáveis para sites.
Guia de Implementação Passo-a-Passo
Fase 1: Planejamento e Descoberta de Alimentação (Semana 1)
Defina sua dieta de informação.
Antes de coletar feeds, esclareça o que importa para você:
Modelo Dieta de Informação
# 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
- LifestyleDescubra feeds RSS de alta qualidade
Use múltiplos métodos de descoberta para cobertura abrangente:
Alimente o Kit de Ferramentas Discovery.
# 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 domainFontes de notícias confiáveis com RSS
Reuters.
Imprensa Associada
Notícias da BBC
NPR
O Diário de Wall Street
Bloomberg.
TechCrunch
Ars Technica
Fase 2: Desenvolvimento de infra-estrutura (Semanas 2-3)
Prepare o serviço de pesquisa de alimentação.
Agendar alimentação regular com o correto tratamento de erros:
Serviços/AlimentoPoller.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 });Implementar o armazenamento de conteúdo
Projete um esquema que suporte consultas e deduplicações eficientes.
Esquema de Banco de Dados (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'
);Fase 3: Integração com IA (Semana 4)
Adicione resumos com inteligência artificial.
Transformar artigos longos em insights escaneáveis:
AI/Summarizer.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
}));
}Implementar lógica de deduplicação
Evite mostrar a mesma história de 10 fontes diferentes:
lib/deduplication.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 };
}Fase 4: Frontend & Entrega (Semana 5)
Construa o painel de notícias.
Crie uma interface intuitiva para consumir suas notícias.
Componentes/NotíciasFeed.tsx (React)
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>
);
}Preparar alerta de roteamento.
Seja notificado sobre histórias críticas através de seus canais preferidos:
Serviços/AlertRouter.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. Avançado: Filtragem e classificação de IA
Os feeds do RSS ainda contêm ruído, e a IA os transforma em um fluxo de informação de precisão.
Pipeline de Filtragem Multi-Layer
Filtragem de Fontes
Apenas editores confiáveis (fiabilidade > 85%)
-Chave combinando.
Inclua: IA, clima, mercados.
Camada 3: Desduplicação
Agrupe histórias semelhantes, mostre a melhor fonte
Camada 4: Ranking AI
Pontuação por relevância, retidão, importância
Camada 5: Retroalimentação do usuário
Aprenda com cliques, economias, ações.
Comparação de Eficácia de Filtragem
Al. Al. Ranking Algoritmo
lib/rankingAlgorithm.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 conteúdo e otimização de tempo
Entender quando as notícias publicam ajuda a otimizar seu horário de votação e hábitos de leitura:
Artigo Publicação Volume por Hora
Análise de custos: construir vs. comprar
Entender o custo real de diferentes abordagens ajuda a tomar decisões informadas:
| Solução | Mensal | Anualmente | Custos Escondidos | Melhor para |
|---|---|---|---|---|
| Google News (Grátis) | $0 | $0 | Privacidade de dados, anúncios. | Leitores casuais. |
| "Alimentada Pro" | $8 | $96 | Recursos limitados de IA | Usuários de energia. |
| Inoreader Pro | $6 | $72 | Limites de taxa na camada livre | Orçamentação consciente |
| RSS Feed Flow | $15 | $180 | Nenhum - preços transparentes | Equipes e profissionais |
| Auto-Alojado (VPS) | $25 | $300 | Tempo de manutenção | Desenvolvedores |
| Plataforma de CI da empresa | $299 | $3588 | Contrato de bloqueio | Grandes orges. |
Estimativa de tempo de construção (horas)
Cálculo ROI
Se você valoriza seu tempo em $50/hora e economiza 4,5 horas/semana:
Calculadora 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.Satisfação do usuário: RSS personalizado vs. Google News
Dados reais mostram lacunas significativas de satisfação em dimensões chave:
Métricas de Satisfação do Usuário (Score 0-100)
8. Cobertura geográfica e diversidade de fontes
Uma dieta de notícias bem equilibrada inclui fontes de várias regiões para evitar pontos cegos geográficos:
| Região | Fontes Rastreadas | Avg. Confiabilidade | .. .. .. |
|---|---|---|---|
| América do Norte | 245 | 94% | Reuters, AP, NPR, WSJ |
| Europa | 198 | 92% | BBC, Guardian, Euronews, DW |
| Ásia-Pacífico | 167 | 88% | SCMP, Straits Times, Nikkei, ABC |
| América Latina | 89 | 85% | El País, Folha, La Nación |
| Oriente Médio e África | 76 | 82% | Al Jazeera, Haaretz, Notícias Árabes |
Estratégia de equilíbrio de bias
Para cobertura politicamente equilibrada, subscreva fontes em todo o espectro:
Centro-esquerda.
NPR, BBC, Guardian
Centro
Reuters, AP, Bloomberg
Centro- Direita
WSJ, Financial Times, Economist
Vazamento de trabalho de automação, de busca para entrega.
Entender o oleoduto completo ajuda a otimizar cada estágio:
| Passo | Frequência | Duração | Nível de Automação | Impacto de Falha |
|---|---|---|---|---|
| - Enchendo a poça. | A cada 15-60 min. | 2-5s. | 100% | Artigos perdidos |
| Processamento de conteúdo | Por artigo | <1s | 100% | Perda de dados. |
| Desduplicação | Por artigo | <1s | 100% | Duplicar o ruído |
| AL Summarização | Sob demanda | 3-8s. | 95% | Sem resumos. |
| Filtragem de palavras-chave | Em tempo real. | <1s | 100% | Conteúdo irrelevante |
| Alerta de Roteamento | Baseado em gatilhos. | <1s | 100% | Notificações atrasadas |
10. Manutenção e Sustentabilidade a Longo Prazo
Lista de Verificação de Manutenção Trimestral
Audição, alimentação, saúde.
Remova as feeds com taxa de falha >10% em 30 dias.
Revisão da diversidade de fontes
Adicione novas fontes em categorias/regiões sub-representadas.
Atualizar filtros de palavras-chave
Adicione tópicos emergentes, remova termos obsoletos.
Analise as métricas de engajamento.
Identificar feeds de alto/baixo desempenho usando dados de cliques.
OPML de backup + banco de dados
Exportar assinaturas, verificar a integridade do backup.
Reveja o desempenho do modelo de IA.
Verifique a qualidade do resumo, ajuste as instruções se necessário.
Questões e soluções comuns
A alimentação para de atualizar.
Causa: Site mudou URL ou estrutura de alimentação
Solução: Use o auto-detecção do RSS Feed Flow para encontrar o novo URL de alimentação, configure URLs de retorno para fontes críticas.
Muitas duplicatas.
Causa: Limite de desduplicação muito rigoroso
Solução: Limite de similaridade menor de 0,85 a 0,75, adicione canonicalização URL para pegar variações de redirecionamento.
AI resume impreciso
Causa: Promessa muito genérica ou conteúdo muito técnico
Solução: Criar alertas específicos de categoria, adicionar exemplos de temas complexos, usar modelo com janela de contexto maior.
Custos elevados da API
Causa: Resumindo cada artigo
Solução: Apenas resumir artigos de alta prioridade, resumos de cache por hash de conteúdo, usar modelo mais barato para o passe inicial.
Notícias de última hora desaparecidas
Causa: Intervalo de sondagem muito longo.
Solução: Reduza o intervalo para alimentação crítica para 5-15 min. Adicione pontes RSS Twitter/X para sinais em tempo real.
11. Como o fluxo de alimentação RSS acelera sua construção
Construir do zero ensina fundamentos, mas RSS Feed Flow fornece infraestrutura pronta para produção:
- Descoberta instantânea de alimentaçãoDetectar automaticamente todas as feeds RSS de qualquer URL, sem busca manual.
- Oleoduto de IA pré-construídoResumalização, extração de entidade, análise de sentimentos fora da caixa
- -Espertos.Combinar múltiplas feeds em fluxos unificados por tópico ou prioridade
- Alertas configuráveisE-mail, Slack, Discórdia, notificações de SMS com gatilhos personalizados
- Widgets incorporáveisMostre suas notícias em sites, blogs ou painéis internos
- Importação/exportação OPMLMigrar de arquivos Feedly, Inoreader ou Google Reader instantaneamente
- Monitoramento da saúde alimentarAlertas automáticos quando as fontes descem ou mudam de estrutura.
- Espaços de trabalho em equipeCompartilhe feeds curados com colegas, clientes ou comunidades.
Perguntas frequentes
13. O Veredito: possui sua linha de informações.
Construir seu próprio "Google News" em 2026 é mais acessível do que nunca.
Os dados são claros: Agregadores RSS personalizados entregam 91% de relevância de conteúdo62% contra 62% para o Google News, com 96% de privacidade. Em uma era de manipulação algorítmica e capitalismo de vigilância, possuir seu oleoduto de informação não é apenas conveniente, é essencial.
Comece com o pequeno: escolha 5 fontes confiáveis, configure filtragem básica e leia por uma semana, então adicione resumo de IA, expanda sua lista de fontes, configure alertas, em um mês, você vai se perguntar como você já toleraram notícias algorítmicas.
Pronto para construir sua experiência personalizada?
Comece com o teste gratuito do RSS Feed Flow, sem cartão de crédito necessário.
Metodologia: Análise baseada em testes de 15 plataformas de agregação de notícias, levantamento de mais de 500 usuários de energia e medição de desempenho em mais de 200 fontes de notícias.