Hey all,

Here's some rough notes that Julien and I came up with at SxSW this
year to talk about the options for using virtual feeds (eg, firehoses,
filtering, track, geo bounaries) with PubSubHubbub. We got some nice
input from bradfitz, Eric Marcoullier (from Gnip), Ilya Grigorik (from
postrank), and of course, Mr. Filtering himself, Bob Wyman.

Please note that order in this doc is not significant at all, we just
wanted to get the options out there. If you have any additional
variants of these specific options or a whole new option let us know.

Thanks in advance for your feedback!

-Brett

---------------

1. Use XRD

- [email protected] has a feed
- Could also work on an arbitrary URI for a domain
- Could also work on the Hub URL

Do some WebFinger: find example.com/.well-known/host-meta

contains:
<link rel="http://pubsubhubbub.org/full-feed";
href="http://buzz.google.com/full-feed"/>

This full feed URL could be a link to subscribe to or it could be an
HTML page that says how to get approval for the firehose. You could
have a click-through ToS to accept some terms, generate a one-off
firehose URL, charge money, whatever you want.

Good things
- No change to hubbub protocol

Bad
- Have to fetch/parse XRD for discovery
- Per feed basis not a per hub if the discovery is not on the hub url
(so custom domains would require firehose discovery every time; would
also like for one domain to have multiple different hubs for
syndication)


2. Link relation in the feed itself

Put something like:

<atom:link rel="supersauce" href="http://buzz.google.com/full-feed"/>

In every feed produced by a publisher.

Good:
- No new discovery document
- Exactly the same discovery flow except different link relation

Bad:
- Have to add this link relation to every feed doc
- New features for additional relation types require publisher to
change their feed yet again (so hub functionality is too tightly
coupled with the publish's feed, as opposed to delegation to the hub
for discovering what the hub can do on behalf of the feed)


3. Verification request includes discovery information

You find a feed, it has some hub urls, you subscribe and then you see
on the verification request something like:

hub.extension.fullfeed=http://example.com/full-feed

And then you know that you could go back to the hub and subscribe to
the full firehose.

Could also use URI templating in here for doing specific kinds of
filtering (using the templating spec
http://bitworking.org/projects/URI-Templates/spec/draft-gregorio-uritemplate-03.html)

hub.extension.filter=http://example.com/filter?params={{params}}&box={{lat/lot,lat/lon}}

Another variant is these extra params could be in the headers of a
notification request.

Good:
- Decouples hub functionality from feed publisher so hub can add new
features without publisher changes
- No extra queries or polling to find the extra features of the hub

Bad:
- Mixing verification and feature discovery is kinda weird (subscriber
would presumably unsubscribe from the same feed once they found the
firehose and that's kinda weird)
- Not clear at all how this would work with authorization of the subscriber
- Unclear if this should be part of the base spec or if we should wait


4. Fuck it

Don't define it. Everyone does virtual feeds/filtering/firehose
declaration a little different and users just figure out how to use
their favorite provider.

Pros:
- Simplify the spec by taking out aggregated delivery (which is kind
of broken in the base spec right now anyways because we're overriding
what atom:source is actually for)

Cons:
- Different providers may completely diverge


5. Like #1 except skip XRD and use a new mode

Do a query on the hub URL like:

http://example.com/hub?hub.mode=whatsup

This returns a 302 or an HTML doc or something that some human needs
to inspect to figure out what they can do with this hub, some of which
may be programmatic.

Reply via email to