Construire un lecteur RSS complet de A à Z avec Next.js, TypeScript et PostgreSQL. Authentification, base de données, déploiement.
Un flux RSS, c'est du XML. On va le fetcher côté serveur et le transformer en objets JavaScript propres.
npm install rss-parserrss-parser gère les variations de format entre les flux — Atom, RSS 2.0, podcasts. On n'a pas à réinventer ça.
import Parser from 'rss-parser'
const parser = new Parser()
export interface FeedItem {
title: string
link: string
pubDate: string
contentSnippet?: string
guid: string
}
export interface Feed {
title: string
description?: string
items: FeedItem[]
}
export async function fetchFeed(url: string): Promise<Feed> {
const feed = await parser.parseURL(url)
return {
title: feed.title ?? url,
description: feed.description,
items: feed.items.map(item => ({
title: item.title ?? '',
link: item.link ?? '',
pubDate: item.pubDate ?? '',
contentSnippet: item.contentSnippet,
guid: item.guid ?? item.link ?? '',
})),
}
}import { NextRequest, NextResponse } from 'next/server'
import { fetchFeed } from '@/lib/rss'
export async function GET(req: NextRequest) {
const url = req.nextUrl.searchParams.get('url')
if (!url) return NextResponse.json({ error: 'url manquante' }, { status: 400 })
try {
const feed = await fetchFeed(url)
return NextResponse.json(feed)
} catch {
return NextResponse.json({ error: 'flux inaccessible' }, { status: 502 })
}
}Tester avec curl :
curl "http://localhost:3000/api/feed?url=https://feeds.feedburner.com/TechCrunch"On devrait recevoir un JSON avec les articles du flux. Prochaine étape : stocker les flux en base.