OStatus/Interop
Some PuSH-enabled services we've poked at so far to see how well they play with OStatus...
| Service | Consume from | Publish to | Webfinger | Salmon replies | Salmon activities | Groups | Notes |
|---|---|---|---|---|---|---|---|
| StatusNet | partial | With OStatus plugin. No webfinger for groups. | |||||
| Google Buzz | Need to fix hcard processing when subbed by profile | ||||||
| Tumblr | only 0.9.1, better author info | ||||||
| LiveJournal | Need better author info | ||||||
| WordPress | With PuSH plugin (PuSHPress (enabled on wordpress.com) and/or PubSubHubub) and a few more (/.well-known/, host-meta, Webfinger, Salmon, ActivityStream Extension, OStatus for WordPress). 0.9.1, possibly better author info? | ||||||
| Blogspot | partial | Has problems conflating blogs and authors, see details. | |||||
| Drupal | Needs to be tested | Needs to be tested | No | ?? | Module available | Feeds 1.0 alpha 12 has support for pubsubhubbub, someone please test | |
| Cliqset | |||||||
| Elgg | testing | testing | intended | testing | testing | partial | Implemented as additional plugins. |
| Gowalla | |||||||
| Posterous | Only 0.9.1, they've got PubSubHubbub-enabled Activity Streams in RSS, annoying Permalink and Comments links. | ||||||
| MiniMe | partial | No | WebFinger works for acct: and http: URI's, No group support yet. | ||||
| Project Danube | partial | No | Personal Data Store |
Contents |
Google Buzz
This should be fairly straightforward to consume...
http://code.google.com/apis/buzz/documentation/#syndication
- Webfinger points to the profile page given a gmail addy
- Public profile page: example http://www.google.com/profiles/brion.vibber
- Note: I had to create that manually before it was reachable
- contains feed link and some info as inline hcard but it's pretty bare by default -- more items can be enabled for public view by the user
- default settings on creation seems to expose only full name
- .vcard .fn (if full name is disabled, "nickname" is shown here, defaults to first name?)
- if photo is enabled it's also findable easily
- .vcard img.photo
- default settings on creation seems to expose only full name
- Public Atom feed
- includes rel=hub link for subscription
- Later: does not include rel=salmon link (but planned for future)
- Warning: feed includes no feed-level author or profile metadata
- feed entries include only atom:author:
- atom:name - full name
- atom:uri - profile uri
- Warning: nick is not cleanly exposed in the sense of your google username / gmail account; we could grab the end of the URL which is either google username or some other customized string
Open issues:
- webfinger path gets the Hcard data but profile-URL path doesn't
- PuSH delivery seems inconsistent; need more testing?
Tumblr
Example feed: http://evanpro.tumblr.com/
- No webfinger
- Public profile page: has an RSS link. Profile data doesn't appear to be marked up as hcard.
- Public RSS2 feed
- has a hub link per spec
- not very clear on authorship info; the rss/channel/link points at the profile page though
- "Bad feed URL: FeedSubException Can't find enough profile information to make a feed."
- individual items:
- title: plaintext
- description: encoded HTML content
- link & guid: URL to source post
Probably not very hard to consume, but we'd need to add consumption of RSS2 feeds for Activity and friends. This is a fairly straightforward transformation from RSS2+Atom to Atom+ActivityStreams.
May need to fetch more profile info explicitly.
LiveJournal
Example: http://brionv.livejournal.com/
- No webfinger
- Profile page
- standard refs to RSS2 and Atom feeds
- no hcard info
- Public Atom feed
- has a hub link per spec
- feed has global <author> with only <name> and nickname, no per-entry author info
- "No author ID URI found"
- feed has a rel=alternate link back to profile page
- entries use non-URL urn: URIs as ids
- entries have alternate/text/html links to individual posts
- entries have <title> for title and <content type="html> for post contents
Wordpress
PuSH plugin now enabled on wordpress.com blogs.
Sample: http://briontest.wordpress.com/
- "Profile" pages... global
- blog home page has a single RSS2 <link> for the global feed
- http://briontest.wordpress.com/feed/ general feed
- blog home page has a single RSS2 <link> for the global feed
- Profile pages: per author
- http://briontest.wordpress.com/author/bvibber/ user page
- author pages have two RSS2 <link>s, one global and one per-user. Hard to tell them apart programatically.
- Public RSS2 feed
- PuSH hub marked per spec (where plugin enabled)
- rss/channel-level <link> to the main or author page
- each rss/channel/item has a:
- title
- link/guid to the post (explicitly not guaranteed permanent)
- <description> with short extract
- <content:encoded> with full HTML
- <media:content> for enclosures...?
- author info per item:
- dc:creator with local username -- no links!
Probably easiest to consider a whole site as an author (though individual author feeds can be pulled too).
Reply considerations?
- future salmon support is intended...
- when we've got a reply-to for a particular item, we should be able to salmon-ping it. Not 100% sure how comments will be addressed to an item though?
Blogspot
Sample: http://briontest.blogspot.com/
This actually works insofar as you can set up a PuSH subscription, and it comes through as an OStatus profile and receives updates.
However... We end up with a bad profile:
- Profile is for the author, but feed is for the blog
- subbing to another blog by the same author gets you "already subscribed to this user"
- nickname is a giant ugly user ID number from the profile URL
- eg "12932299467049762017"
- a name does get carried over though... 'brion' on my sample blog
Drupal
Modules:
- Discovery - Hammer stack, Webfinger
- Feeds - Drupal as PuSH subscriber
- PubSubHubbub Hub - Drupal as (onboard) PuSH Hub
- Activity - To do: RSS row plugin for Views: http://activitystrea.ms/
- Facebook-style Statuses (Microblog) (integrates with Activity)
- Microformats
- OAuth Connector
- Organic Groups - Use this with Rules or some such?
Other:
- ostatus ion | Ostatus working in Drupal
- Drupalcon Copenhagen: Go real-time with PubSubHubbub and Feeds
- Drupalcon Copenhagen: Connect Drupal
Elgg
Sample: https://n-1.artelibredigital.net/mod/riverdashboard/
Sample Atom Feed: https://n-1.artelibredigital.net/mod/riverdashboard/?view=activitystream
Sample sindicator site: http://hub.lorea.cc
At the moment groups, profiles or whole network activity can be published over pubsubhub/activity streams. Development under way to have salmon for comments (already working in testing), and group support, as well as reasonable support for most elgg types (at the moment events, groups, blogposts and bookmarks, as well as pure activity -the elgg river-).
The support is implemented in a number of different plugins, and is still not completely stand alone (requires some modifications to elgg).
The plugins code can be found at:
- activitystreams: http://bitbucket.org/rhizomatik/elgg_activitystreams
- foreign_objects: http://bitbucket.org/rhizomatik/elgg_foreign_objects
- pubsubhub: http://bitbucket.org/rhizomatik/elgg_pshb
- salmon: http://bitbucket.org/rhizomatik/elgg_salmon
This is still experimental and untested with external services. We hope soon will be acceptable quality for general use.
Also, the lorea_production version of elgg has all the "production ready" features enabled and is the best way to test at the moment since it comes with all the plugins. http://bitbucket.org/rhizomatik/lorea_production. Some networks actively supporting the federation plugins: https://n-1.cc, http://redesenred.net, http://red.artelibredigital.net
direct questions about elgg ostatus support can be directed to devel@lorea.cc, or to the ostatus ml.
MiniMe Microblogger
Example installation in http://lobstermonster.org/
Host-Meta - http://lobstermonster.org/.well-known/host-meta
<?xml version="1.0" encoding="UTF-8"?> <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0" xmlns:hm="http://host-meta.net/xrd/1.0"> <hm:Host>lobstermonster.org</hm:Host> <Link rel="lrdd" template="http://www.lobstermonster.org/lrdd?uri={uri}"> <Title>Resource Descriptor</Title> </Link> </XRD>
LRDD - http://www.lobstermonster.org/lrdd?uri=acct%3Akoski%40lobstermonster.org
<?xml version="1.0" encoding="UTF-8"?> <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0"> <Subject>Tuomas Koski</Subject> <Alias>http://www.lobstermonster.org/profile/koski</Alias> <Link rel="http://schemas.google.com/g/2010#updates-from" href="http://www.lobstermonster.org/atom/koski" type="application/atom+xml"/> <Link rel="http://salmon-protocol.org/ns/salmon-replies" href="http://www.lobstermonster.org/salmon/koski"/> <Link rel="magic-public-key" href="data:application/magic-public-key,RSA.quCNBj3KbWmJG1huVxTvHWjCenThHYSb49y7HLPz_fVUfTUYMVfz7Qt8IkTXKj9TartEhNG2FzTIZzu4mkSzkKDZ9NflWs2VIJCWZoF-xJY4FAGKvja-Tuxn-K2trjKa6bypIEfM4qYWVHr_Sxfx3r4fioAe2z90p3AKF6aWm10=.AQAB"/> </XRD>
Profile page - http://www.lobstermonster.org/profile/koski
Atom page - http://www.lobstermonster.org/atom/koski
Salmon page - http://www.lobstermonster.org/salmon/koski
Project Danube
Website http://projectdanube.org/ (also known as "Project Nori" or "Personal Data Store")
- Webfinger: works by "mapping" I-Names/XRI to acct: URIs.
- Example: =markus becomes acct:markus@xri2xrd.net
- Profile Page: is actually a classic I-Name Contact Page, e.g. http://xri2xrd.net/=!91F2.8153.F600.AE24, but should contain all the required OStatus discovery information
- Atom feed: E.g. https://contact.fullxri.com/feed/atom/=!91F2.8153.F600.AE24
- Salmon endpoint: E.g. https://contact.fullxri.com/salmon/=!91F2.8153.F600.AE24
- hCard endpoint: E.g. https://contact.fullxri.com/hcard/=!91F2.8153.F600.AE24