Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

RSS, Atom and OPML feeds for integrations

Feeds as the simplest pull integration - exporting content as RSS 1.0, RSS 2.0, Atom, OPML or podcast feeds, importing other systems' RSS feeds by cronjob, how imported items are keyed, caching, cleanup, and the limits…

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/integrators/rss-atom-and-opml-feeds.md

On this page

RSS, Atom and OPML feeds for integrations

This page is for integrators who need a simple, standard way to move lists of content between systems. A feed is a pull integration that needs no code: Exponential publishes a feed that any reader, aggregator or downstream system can poll, and it can read the RSS feeds of other systems and turn their items into content objects. The administration side is described in RSS feeds.

Contents

  1. When a feed is enough
  2. Exporting
  3. Importing
  4. How imported items are keyed
  5. Caching and freshness
  6. Limits
  7. Checklist

When a feed is enough

Good fitPoor fit
A partner site shows your latest newsThe other system needs every field of every object
An aggregator, newsletter tool or social media scheduler picks up new articlesTwo-way exchange, edits and removals must travel
You take in a press agency's or a group company's RSS feedThe source only offers Atom (no Atom import)
A podcast directory reads your episodesReal-time delivery within seconds

Exporting

An export lists the newest objects below one or more sources (a location, a class, and optionally the subitems) at /rss/feed/<address>, on the public site of the export's siteaccess. Formats (kernel/classes/ezrssexport.php):

FormatStored valueNotes
RSS 1.01.0Written, like RSS 2.0 and Atom, with the feed library of the expcomponents (ezcFeed, the fork of the Zeta Components Feed library)
RSS 2.02.0The usual choice; an image can be set
Atom 1.0ATOMRFC 4287
OPML 2.0OPMLA list of other feeds; site.ini [RSSSettings] OPMLMaxOutlines (default 5000)
Apple PodcastsITUNESRSS 2.0 with the podcast elements

Per source you choose which class attributes become the item's title, description, category and enclosure. Create and edit exports at Setup > RSS (/rss/list, policy rss/edit). Exports are stored in the database (ezrss_export and related tables), so set them up on each environment or include them in the database you copy.

Test an export from the receiving side:

curl -s https://example.com/rss/feed/<address> | head -20

Importing

An import reads an RSS feed (RSS 0.91, 0.92, 1.0 and 2.0; kernel/classes/ezrssimport.php) and creates an object below its destination for every item it has not seen before. The import form has four parts: the feed and its URL, where the items go (destination and owner), what each item becomes (the class and the mapping of feed fields to attributes), and whether it runs.

Nothing is read until the cronjob runs: rssimport.php is in the global part of settings/cronjob.ini ([CronjobSettings] Scripts[]), which runs when runcronjobs.php is called without a part name:

php runcronjobs.php -s <siteaccess> --script=rssimport.php   # one run, by hand
php runcronjobs.php -s <siteaccess>                          # the global part, as the crontab runs it

The import refuses external entities and switches the network off while parsing (LIBXML_NONET), and fetches only http and https addresses.

How imported items are keyed

Every object an import creates gets a remote id that starts with RSSImport_<import id>_; the RSS overview counts imported objects by that prefix. This is the same idea every integration should use: a stable, prefixed key per source record (Idempotent imports keyed by remote_id).

An import adds objects and never removes or updates them. To keep a busy feed from growing without limit, switch on the cleanup (content.ini [RSSImportCleanupSettings], command php bin/php/cleanuprss.php --apply, cronjob part cleanuprss), which keeps the newest N items of each active import (RSS import cleanup).

Caching and freshness

SettingEffect
site.ini [RSSSettings] CacheTimeSeconds a written feed is served from cache; 0 writes it anew for every request
Cache id rss_cacheClear it after a change that must show at once: php bin/php/ezcache.php --clear-id=rss_cache --allow-root-user

Tell the consumers how often to poll; polling far more often than CacheTime gains nothing.

Limits

  • No Atom import: the importer reads the version attribute of an RSS root element only.
  • GET /api/ezp/<version>/content/node/<id>/listAtom of the REST API answers 500; use an RSS export instead.
  • An export lists the newest items, not a full archive: it is not a substitute for a data export.
  • Imports do not follow updates or deletions of items at the source.

Checklist

  • To do: Export: format, address, sources, item count and attribute mapping agreed with the consumer.
  • To do: Export: CacheTime and the polling interval written into the interface specification.
  • To do: Import: destination, owner (a service account) and class mapping set; the feed URL uses https.
  • To do: Import: the cronjob that runs rssimport.php is in the crontab and runs for the right siteaccess.
  • To do: Import: cleanup configured if the feed is busy.

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x