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 <link rel="alternate">-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 <link>-Tags mit rel="alternate" und Feed-MIME-Typen:

  • application/rss+xml
  • application/atom+xml
  • application/json

2. Anker-Analyse (Anchor Analysis)

Durchsucht Anker-Tags (<a>) 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

Programmatische Implementierung

Ein einfaches Beispiel:

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

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

// Anchor search (checks <a> 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
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

Comments

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To respond on your own website, enter the URL of your response which should contain a link to this post’s permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post’s URL again. (Find out more about Webmentions.)