FreshRSS supports the OPML format to export and import lists of RSS/Atom feeds in a standard way, compatible with several other RSS aggregators.
However, FreshRSS also supports several additional features not covered by the basic OPML specification. Luckily, the OPML specification allows extensions:
An OPML file may contain elements and attributes not described on this page, only if those elements are defined in a namespace.
and:
OPML can also be extended by the addition of new values for the type attribute.
FreshRSS uses the XML namespace https://freshrss.org/opml to export/import extended information not covered by the basic OPML specification.
The list of the custom FreshRSS attributes can be seen in the source code, and here is an overview:
<outline type="HTML+XPath" ...: Additional type of source, which is not RSS/Atom, but HTML Web Scraping using XPath 1.0.ℹ️ XPath 1.0 is a standard query language, which FreshRSS supports to enable Web scraping.
<outline type="XML+XPath" ...: Same than HTML+XPath but using an XML parser.The following attributes are using similar naming conventions than RSS-Bridge.
frss:xPathItem: XPath expression for extracting the feed items from the source page.
//div[@class="news-item"]frss:xPathItemTitle: XPath expression for extracting the item’s title from the item context.
descendant::h2frss:xPathItemContent: XPath expression for extracting an item’s content from the item context.
.frss:xPathItemUri: XPath expression for extracting an item link from the item context.
descendant::a/@hreffrss:xPathItemAuthor: XPath expression for extracting an item author from the item context.
"Anonymous"frss:xPathItemTimestamp: XPath expression for extracting an item timestamp from the item context. The result will be parsed by strtotime().frss:xPathItemTimeFormat: Date/Time format to parse the timestamp, according to DateTime::createFromFormat().frss:xPathItemThumbnail: XPath expression for extracting an item’s thumbnail (image) URL from the item context.
descendant::img/@srcfrss:xPathItemCategories: XPath expression for extracting a list of categories (tags) from the item context.frss:xPathItemUid: XPath expression for extracting an item’s unique ID from the item context. If left empty, a hash is computed automatically.<outline type="JSON+DotNotation" ...: Similar to HTML+XPath but for JSON and using a dot/bracket syntax such as object.object.array[2].property.
frss:jsonItem: JSON dot notation for extracting the feed items from the source page.
data.itemsfrss:jsonItemTitle: JSON dot notation for extracting the item’s title from the item context.
meta.titlefrss:jsonItemContent: JSON dot notation for extracting an item’s content from the item context.
contentfrss:jsonItemUri: JSON dot notation for extracting an item link from the item context.
meta.links[0]frss:jsonItemAuthor: JSON dot notation for extracting an item author from the item context.
frss:jsonItemTimestamp: JSON dot notation for extracting an item timestamp from the item context. The result will be parsed by strtotime().
frss:jsonItemTimeFormat: Date/Time format to parse the timestamp, according to DateTime::createFromFormat().
frss:jsonItemThumbnail: JSON dot notation for extracting an item’s thumbnail (image) URL from the item context.
frss:jsonItemCategories: JSON dot notation for extracting a list of categories (tags) from the item context.
frss:jsonItemUid: JSON dot notation for extracting an item’s unique ID from the item context. If left empty, a hash is computed automatically.
<outline type="JSONFeed" ...: Uses JSON+DotNotation behind the scenes to parse a JSON Feed.A number of cURL options are supported:
frss:CURLOPT_COOKIEfrss:CURLOPT_COOKIEFILEfrss:CURLOPT_FOLLOWLOCATIONfrss:CURLOPT_HTTPHEADERfrss:CURLOPT_MAXREDIRSfrss:CURLOPT_POSTfrss:CURLOPT_POSTFIELDSfrss:CURLOPT_PROXYfrss:CURLOPT_PROXYTYPEfrss:CURLOPT_USERAGENTfrss:cssFullContent: CSS Selector to enable the download and extraction of the matching HTML section of each articles’ Web address.
div.main, .summaryfrss:cssFullContentFilter: CSS Selector to remove the matching HTML elements from the full content retrieved by frss:cssFullContent.
.footer, .asidefrss:filtersActionRead: List (separated by a new line) of search queries to automatically mark a new article as read.frss:opmlUrl: If non-empty, indicates that this outline (category) should be dynamically populated from a remote OPML at the specified URL.<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0">
<head>
<title>FreshRSS OPML extension example</title>
</head>
<body>
<outline xmlns:frss="https://freshrss.org/opml"
text="Example"
type="HTML+XPath"
xmlUrl="https://www.example.net/page.html"
htmlUrl="https://www.example.net/page.html"
description="Example of Web scraping"
frss:xPathItem="//a[contains(@href, '/interesting/')]/ancestor::article"
frss:xPathItemTitle="descendant::h2"
frss:xPathItemContent="."
frss:xPathItemUri="descendant::a[string-length(@href)>0]/@href"
frss:xPathItemThumbnail="descendant::img/@src"
frss:cssFullContent="article"
frss:filtersActionRead="intitle:⚡️ OR intitle:🔥 something"
/>
</body>
</opml>