-
Notifications
You must be signed in to change notification settings - Fork 55
RSS Atom Extensions
The XML Namespaces URI [W3C.REC-xml-names-19990114] for the XML elements and attributes described in this specification is: http://fraidyc.at/ext/1.0
In this document, the namespace prefix "fc:" is used for the above Namespace URI. Note that the choice of namespace prefix is arbitrary and not semantically significant.
The status
element contains an ephemeral notice, indicating the current activity at this resource. The element MAY contain a type
attribute identifying the intent of the status. So, in the case of a blog feed, a status
can contain a pinned post, an Instagram-style story or a livestream status.
A status
contains the same elements normally found in an Atom entry
. (Used for normal feed items - blog posts and such.) However, to avoid having existing feed readers treat these items as incoming entries, a separate fc:status
element has been created, very similar to the existing atom:entry
tag.
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:fc="http://fraidyc.at/ext/1.0">
<fc:status type="pinned">
<id>https://twitter.com/alienmelon/status/1126982065725902848</id>
<link href="https://twitter.com/alienmelon/status/1126982065725902848"/>
<summary>It's out! The Electric Zine Maker (public beta)</summary>
<published>2020-03-01T17:28:01+00:00</published>
<updated>2020-05-10T22:47:17+00:00</updated>
</fc:status>
</feed>
This is an example of how a pinned tweet (on Twitter) would be encoded as an Atom Status.
A feed MAY contain many statuses, in no particular order.
Valid type
attributes are:
-
"info" (default): If no
type
is supplied, this is the default. -
"pinned": Indicates a status that is also a normal feed entry. This can help prevent duplicates and also expects the
link
tag to be present. This is also expected to be a permanent URL - whereas the other types here can be transitory. -
"live": The author of this content is currently livestreaming at the URL supplied by the
link
tag. (As opposed to pinned posts, this is likely an external URL. Though there is no restriction on either.) This should only be used when actually streaming - to advertise the upcoming stream, the above 'info' and 'pinned' types work well. -
"urgent": A sitewide alert. These (like 'info' statuses) often have an
expires
tag as well. If not, it is expected that the status will notify readers of a important permanent change, such as the site's closing or of migration to a new platform.
Statuses also MAY have an optional label
attribute. This can contain a Unicode character which can act as the icon for this status. (Feed readers may choose to limit this label to a single
<fc:status type="live" label="☂️">
<id>tag:kickscondor.com,2020:live</id>
<link href="https://twitch.tv/kickscondor"/>
<title>.: FRAIDYCATS FUNTIMES :.</title>
<published>2020-03-27T20:28+00:00</published>
<updated>2020-03-27T20:28+00:00</updated>
</fc:status>
(In Fraidycat, the RED CIRCLE 🔴 acts as the default label for 'live' statuses.)
If you need a status to disappear at an exact time, you should use the age:expires
or age:max-age
tags.
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:fc="http://fraidyc.at/ext/1.0"
xmlns:age="http://purl.org/atompub/age/1.0">
<fc:status type="pinned">
<id>tag:doingthings.daily,2020:pin</id>
<title>I'll be at Panera Bread until noon.</title>
<published>2020-05-01T10:28:01Z</published>
<age:expires>2020-05-01T12:20:00Z</age:expires>
</fc:status>
</feed>
If you have a direct link to the video stream, you can supply that using a media:content
tag.
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:fc="http://fraidyc.at/ext/1.0"
xmlns:media="http://search.yahoo.com/mrss/">
<fc:status type="live">
<id>https://live.drewdevault.com</id>
<link href="https://live.drewdevault.com"/>
<title>Drew DeVault codes live</title>
<published>2020-03-27T20:28+00:00</published>
<updated>2020-03-27T20:28+00:00</updated>
<media:content medium="video" type="application/dash+xml"
url="https://live.drewdevault.com/dash/broadcast.mpd"/>
</fc:status>
</feed>
This technique can also be used to post a series of Instagram-style 'stories' - by leaving off the live
type and embedding the video segments.
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:fc="http://fraidyc.at/ext/1.0"
xmlns:media="http://search.yahoo.com/mrss/">
<fc:status>
<id>https://kickscondor.com/stories/1</id>
<published>2020-03-27T20:28+00:00</published>
<updated>2020-03-27T20:28+00:00</updated>
<media:content medium="video" type="video/mp4"
url="https://stories.kickscondor.com/1.mp4" duration="12"/>
</fc:status>
<fc:status>
<id>https://kickscondor.com/stories/2</id>
<published>2020-03-27T20:29+00:00</published>
<updated>2020-03-27T20:29+00:00</updated>
<media:content medium="video" type="video/mp4"
url="https://stories.kickscondor.com/2.mp4" duration="20"/>
</fc:status>
</feed>
It's useful to include the duration
in these cases, to allow a overall timeline to be shown.
This same tag can also be used in RSS feeds. However, you will need to use the appropriate elements found in an RSS item
. (For example, using pubDate
instead of published
.)
<fc:status type="live" label="☂️">
<link>https://twitch.tv/kickscondor</link>
<title>.: FRAIDYCATS FUNTIMES :.</title>
<pubDate>2020-03-27T20:28+00:00</pubDate>
</fc:status>
In JSON Feed, the _status
extension is used.
"_status": [{
"id": "live-id",
"url": "https://twitch.tv/kickscondor",
"title": ".: FRAIDYCATS FUNTIMES :.",
"date_published": "2020-03-27T18:21:46.122Z",
"date_modified": "2020-03-27T18:21:46.122Z"
}]
This appendix is informative.
status =
element fc:status {
atomCommonAttributes,
type,
label?,
(atomAuthor*
& atomCategory*
& atomContent?
& atomContributor*
& atomId
& atomLink*
& atomPublished?
& atomRights?
& atomSource?
& atomSummary?
& atomTitle
& atomUpdated
& extensionElement*)
}
type = attribute type { "info" | "pinned" | "urgent" | "live" }?