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’re doing a good job telling its story through a series
of entries. I recommend people read what they’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>