rss ping

Summary

The goal of RSS Ping is provide richer metadata flowing across the ping stream. RSS Ping enhances what is currently sent with an extended ping with the equivalent of a single RSS or Atom item.

Currently a standard ping has the site name and site URI, an extended ping adds a RSS feed URI. We're expanding that to allow multiple feed URLs, authentication, and a payload. Payload content can have attributes to represent different types of payloads and an attribute indicating what type of MIME type.

Root element

rss_ping
The root element has one required attribute, version. The RSS Ping described by this specification is version 2 (where 2.0 is implied if there is no '.0').

Core Elements

Unless explicitly stated otherwise, there may be only one of each element.

site_name
The name or title of a site.
site_uri
The URI of the site's home page
feed_uri
The URI of the source feed for this fragment of content. There may be multiple feed_uri elements. Each element requires the type attribute. The type attribute consists of two parts, a single word name followed by a space and then a float version number. Type is case insensitive. Examples would be "RSS 2.0" or "RSS 0.92" or "Atom 0.3".
payload_hash_uri (optional; mandatory attribute: "SHA1" or "MD5")
The location of a SHA1 or MD5 hash of the contents of the payload, when pingserver-side (on-the-fly) authentication is used to verify the RSSping.
publisher_mbox_hash (optional; mandatory attribute: "SHA1" or "MD5")
Contains a SHA1 or MD5 hash of the email address for the primary contact, when publisher-side (pre-arranged) authentication is used to verify the RSSping.

Payload

payload

The payload element contains a feed fragment (defined as a single and self-contained item from a feed like a RSS item or Atom entry) or a feed with a single item.

The payload must contain a minimum of a: title or description or content or summary and: link or guid or permalink for the individual content item which is being updated. More generally, to allow for future formats to be used, the minimum requirements for the payload are a headline and uri, where exact element names can vary as long as they are semantically equivalent. Where the payload contains RSS or Atom, individual items or entries may be submitted, without surrounding channel or feed information. In this case the payload type should contain the string 'fragment', e.g payload type="Atom 0.3 fragment". Namespaces when using payloads which contain feed fragments. If a fragment of a feed is used which contains namespaced elements, to avoid 'dangling' namespaces, the payload element must contain relevant namespace uri attributes and the encoding type. e.g.<payload type="RSS 1.0 fragment" encoding="iso-8859-1" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/">

Authentication (draft)

Pingserver-side authentication.

Predecessors to RSS Ping require passing limited information to a ping server and then pulling content from an entire RSS feed and/or webpage. RSS Ping allows for spam free authenticated pings by sending content directly as a ping and checking a matching hash of the payload (MD5 or preferably SHA1), stored at the 'payload_hash_uri' on the publishers site.

(This is the preferred method of authentication for smaller publishers who nevertheless want to benefit from the advantages of RSS Ping)

Publisher-side authentication.

For a fully authenticated ping that requires no round trip by the ping server provider or aggregation service, the ping endpoint is a hash of site_uri+password+datetime (MD5 or preferably SHA1) where datetime is a single use token retrieved from ping server that sets up a onetime use endpoint to ping.

(This level of authentication need only be provided for larger publishers or people with particularly time sensitive information such as prices)

Sharing authenticated pings between ping server providers.

Any authorized ping server provider may place an authenticated flag in feeds based upon pings, or pings that are forwarded directly to another ping server to indicate which pings were authenticated, either as 'pingserver_side' or 'publisher_side'.

(Ping server providers may later negotiate their own security and authorization mechanism, collaboratively. Since the number of ping servers is expected to be much smaller than the number of publishers, ping server providers are analogous to certification authorities rather than service providers, no automated certicate or authentication system need be provided.)

Notes

Many sites, including larger publishers, are reluctant to send full content within feeds since it potentially reduces traffic to the destination site. Passing the full content is necessary for search engines to index content in real-time. It is proposed that a new type of content type, 'content type=tokenized' is used, whereby standard stop words such as 'and','of','the' are removed to produce text which cannot be re-published or read out of context, but which allows indexing for search engine purposes without crawling destination pages. This way, using RSSping with full content or tokenized content, information can be indexed directly as it is pinged, reducing the round-tripping that RSSping is designed to avoid.

Examples

Below are examples of pings sent via an http POST.
Alterative XML-RPC or SOAP enpoints may also be provided.


RSS ping with a single item RSS 2.0 feed as a payload:

<rss_ping version=2>
<site_name>Photo Matt</site_name>
<site_uri>http://photomatt.net</site_uri>
<feed_uri type="RSS 2.0">http://photomatt.net/index.xml</feed_uri>
<payload_hash>edheuhdghgDDefweffd</payload_hash>
<payload_hash_uri>http://photomatt.net/edheuhdghgDDefweffd</payload_hash_uri>
<payload type="RSS 2.0" encoding="utf-8">
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<title>Photo Matt</title>
<link>http://photomatt.net</link>
<description>Photos, music, writing, code, unlucky cards, Matt.</description>
<pubDate>Thu, 14 Jul 2005 19:13:43 +0000</pubDate>
<generator>http://wordpress.org/?v=1.6-ALPHA-do-not-use</generator>
<language>en</language>
<item>
<title>Movable Type 3.2</title>
<link>http://photomatt.net/2005/07/14/movable-type-32/</link>
<comments>http://photomatt.net/2005/07/14/movable-type-32/#comments</comments>
<pubDate>Thu, 14 Jul 2005 19:13:43 +0000</pubDate>
<dc:creator>Matt</dc:creator>
<category>Asides</category>
<guid>http://photomatt.net/2005/07/14/movable-type-32/</guid>
<description><![CDATA[ The new version of Movable Type sounds very nice, and they&#8217;re doing a good job telling its story through a series of entries. I recommend people read what they&#8217;re adding and if anything particularly strikes your fancy let us know so we can consider it for WordPress. Inspiration for WordPress has always come from many [...]]]></description>
<wfw:commentRSS>http://photomatt.net/2005/07/14/movable-type-32/feed/</wfw:commentRSS>
</item>
</channel>
</rss>
</payload>
</rss_ping>

RSS ping with an Atom 1.0 fragment (entry) as a payload:

<rss_ping version=2>
<site_name>Photo Matt</site_name>
<site_uri>http://photomatt.net</site_uri>
<feed_uri type="Atom 1.0">http://photomatt.net/posts.atom</feed_uri>
<payload_hash>edheuhdghgDDefweffd</payload_hash>
<payload_hash_uri>http://photomatt.net/edheuhdghgDDefweffd</payload_hash_uri>
<payload type="Atom 1.0 fragment" encoding="utf-8">

<?xml version="1.0" encoding="utf-8"?>
<entry>
<title>Atom-Powered Robots Run Amok</title>
<link href="http://example.org/2003/12/13/atom03"/>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<summary>Some text.</summary>
</entry>
</payload>
</rss_ping>

RSS ping with an RSS 1.0 fragment (item) as a payload:

<rss_ping version=2>
<site_name>David galbraith's weblog</site_name>
<site_uri>http://www.davidgalbraith.org</site_uri>
<feed_uri type="RSS 1.0">http://www.davidgalbraith.org/index.rdf</feed_uri>
<feed_uri type="RSS 0.91">http://www.davidgalbraith.org/index.xml</feed_uri>
<payload_hash>edheuhduewDDefweffd</payload_hash>
<payload_hash_uri>http://davidgalbraith.org/edheuhduewDDefweffd</payload_hash_uri>
<payload type="RSS 1.0 fragment" encoding="iso-8859-1" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:author="http://davidgalbraith.org/rss/modules/author/" xmlns:admin="http://webns.net/mvcb/" xmlns="http://purl.org/rss/1.0/">

<item rdf:about="http://WWW.davidgalbraith.org/archives/000850.html">
<title>Weird sewer fishing machine in lower Manhattan</title>
<description>The guy pictured was outside my door this morning with a bizarre looking Rube Goldberg (Heath Robinson) contraption. Apparently the...</description>
<link>http://WWW.davidgalbraith.org/archives/000850.html</link>
<dc:subject />
<dc:creator>david galbraith</dc:creator>
<author:linkHtml rdf:resource="http://www.davidgalbraith.org/author/bio.xml" />
<author:linkXml rdf:resource="http://www.davidgalbraith.org/author/bio.xml" />
<dc:date>2005-06-22T16:17:39-08:00</dc:date>
</item>
</payload>
</rss_ping>

RSS ping with a single item RSS 1.0 feed as a payload:

<rss_ping version=2>
<site_name>David galbraith's weblog</site_name>
<site_uri>http://www.davidgalbraith.org</site_uri>
<feed_uri type="RSS 1.0">http://www.davidgalbraith.org/index.rdf</feed_uri>
<feed_uri type="RSS 0.91">http://www.davidgalbraith.org/index.xml</feed_uri>
<payload_hash>edheuhdghgDDefweffd</payload_hash>
<payload_hash_uri>http://davidgalbraith.org/edheuhdghgDDefweffd</payload_hash_uri>
<payload type="RSS 1.0" encoding="iso-8859-1">

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:author="http://davidgalbraith.org/rss/modules/author/" xmlns:admin="http://webns.net/mvcb/" xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://WWW.davidgalbraith.org/">
<title>David Galbraith</title>
<link>http://WWW.davidgalbraith.org/</link>
<description>David galbraith's weblog, covering: software design, architecture, the semantic web, metadata, politics</description>
<language>en-us</language>
<webMaster />
<lastBuildDate>2005-06-22T16:17:39-08:00</lastBuildDate>
<pubDate>2005-06-22T16:17:47-08:00</pubDate>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=2.64" />
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://WWW.davidgalbraith.org/archives/000850.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://WWW.davidgalbraith.org/archives/000850.html">
<title>Weird sewer fishing machine in lower Manhattan</title>
<description>The guy pictured was outside my door this morning with a bizarre looking Rube Goldberg (Heath Robinson) contraption. Apparently the...</description>
<link>http://WWW.davidgalbraith.org/archives/000850.html</link>
<dc:subject />
<dc:creator>david galbraith</dc:creator>
<author:linkHtml rdf:resource="http://www.davidgalbraith.org/author/bio.xml" />
<author:linkXml rdf:resource="http://www.davidgalbraith.org/author/bio.xml" />
<dc:date>2005-06-22T16:17:39-08:00</dc:date>
</item>
</rdf:RDF>
</payload>
</rss_ping>