feedseeker – Ein robuster Feed-Discovery-Mechanismus für Node.js

Die Identifizierung von Syndication-Feeds (RSS, Atom, JSON) stellt Entwickler oft vor Herausforderungen. Trotz Standards wie dem -Tag ist die Implementierung im Web inkonsistent.

Das Problem: Inkonsistente Metadaten

Viele Webseiten verzichten auf korrekte Header-Deklarationen oder nutzen proprietäre Pfade für ihre Feeds. Ein einfacher GET-Request auf /rss reicht in der Produktion nicht aus. feedseeker löst dies durch eine mehrstufige Heuristik:

1. Meta-Links

Die schnellste Methode. Sucht nach -Tags mit rel="alternate" und Feed-MIME-Typen:

application/rss+xml

application/atom+xml

application/json

2. Anker-Analyse (Anchor Analysis)

Durchsucht Anker-Tags () nach URLs, die aufgrund folgender Merkmale wie Feeds aussehen:

Häufige Feed-Pfade (/feed, /rss, /atom, etc.)

Feed-typische Dateiendungen (.xml, .rss, .atom)

Feed-Schlüsselwörter in den URLs

3. Blindsuche (Blind Search)

Testet hunderte gängiger Muster für Feed-Endpunkte:

/feed, /rss, /atom, /feeds

WordPress-Muster (/feed/, /comments/feed)

Kategorie- oder Tag-Feeds (/category/*/feed)

Pfade mit Jahreszahlen (/2024/feed)

Und viele weitere Variationen

4. Tiefensuche (Deep Search / Crawling)

Durchsucht die Website rekursiv (Crawling), um Feeds zu entdecken:

Folgt internen Links bis zu einer festgelegten Tiefe

Prüft jede Seite auf Feeds

Konfigurierbare Tiefe und Link-Limits

Berücksichtigt die Same-Domain-Beschränkung

Installation

npm install feedseeker

npm install feedseeker

Programmatische Implementierung

Ein einfaches Beispiel:

const seeker = new FeedSeeker("https://example.com");
await seeker.initialize();

// Meta links (fastest, checks HTML tags)
const metaFeeds = await seeker.metaLinks();

// Anchor search (checks tags for feed-like URLs)
const anchorFeeds = await seeker.checkAllAnchors();

// Blind search (tries common feed endpoint patterns)
const blindFeeds = await seeker.blindSearch();

// Deep search (crawls website for feeds)
// Options are passed via constructor, e.g. new FeedSeeker(url, { maxDepth: 2, maxLinks: 50 })
const deepFeeds = await seeker.deepSearch();

const seeker = new FeedSeeker("https://example.com");
await seeker.initialize();

// Meta links (fastest, checks HTML tags)
const metaFeeds = await seeker.metaLinks();

// Anchor search (checks tags for feed-like URLs)
const anchorFeeds = await seeker.checkAllAnchors();

// Blind search (tries common feed endpoint patterns)
const blindFeeds = await seeker.blindSearch();

// Deep search (crawls website for feeds)
// Options are passed via constructor, e.g. new FeedSeeker(url, { maxDepth: 2, maxLinks: 50 })
const deepFeeds = await seeker.deepSearch();

Eine detalliertere Beschreibung befindet sich auf der npm-Seite.

Client

Das Paket enthält einen ausführlichen Client, mit dem man in der Kommandazeile eines Terminals nach den Feeds einer Webseite suchen kann:

node feedseeker-cli.js elektroelch.de
____________ .____________ __
\_ _____/___ ____ __| _/ _____/ ____ ____ | | __ ___________
| __)/ __ \_/ __ \ / __ |\_____ \_/ __ \_/ __ \| |/ // __ \_ __ \
| \\ ___/\ ___// /_/ |/ \ ___/\ ___/| <\ ___/| | \/
\___ / \___ >\___ >____ /_______ /\___ >\___ >__|_ \\___ >__|
\/ \/ \/ \/ \/ \/ \/ \/ \/

Starting Meta Links ......... Found 5 feeds.
Comments on: Main

Main

Kommentare für elektro:elch
https://elektroelch.de/comments/feed/

elektro:elch
https://elektroelch.de/feed/

Kommentare zu: Main

Main

elektro:elch
https://elektroelch.de/feed/json/

node feedseeker-cli.js elektroelch.de
____________ .____________ __
\_ _____/___ ____ __| _/ _____/ ____ ____ | | __ ___________
| __)/ __ \_/ __ \ / __ |\_____ \_/ __ \_/ __ \| |/ // __ \_ __ \
| \\ ___/\ ___// /_/ |/ \ ___/\ ___/| <\ ___/| | \/
\___ / \___ >\___ >____ /_______ /\___ >\___ >__|_ \\___ >__|
\/ \/ \/ \/ \/ \/ \/ \/ \/

Starting Meta Links ......... Found 5 feeds.
Comments on: Main
https://elektroelch.de/main-2/feed/json/

Kommentare für elektro:elch
https://elektroelch.de/comments/feed/

elektro:elch
https://elektroelch.de/feed/

Kommentare zu: Main
https://elektroelch.de/main-2/feed/

elektro:elch
https://elektroelch.de/feed/json/

Jetzt ausprobieren auf npmjs.com/package/feedseeker