« Plug Into Austin’s Interactive Scene | Home | Web Sites Behind the Scenes »
Activity Streams: Getting your users’ actions out onto the social web
By Gregory Foster | November 22, 2009
Notes By Gregory Foster
Last updated 11.22.2009
What?
Activity Streams is an emerging standard for publishing a website user’s activities as an Atom feed. It’s already being used by:
- Facebook: securely publishing activities from your profile wall.
- MySpace: publishing you and your friend’s activities.
- Microsoft: gathering and re-publishing your activities from 74 websites (including Facebook and MySpace). Roughly 14 of those sites are publishing Activity Streams-compliant feeds.
Why?
Perhaps the best operative metaphor is that of standardizing railroad track gauges between social networking platforms, enabling a record of one’s activities to move fluidly between the sites you use, to be shared with your different social networks in a manner controlled by you.
- The Why? from Chris Messina’s Activity Streams presentation for Facebook
- To develop a format for expressing activities.
- To stay in touch across the web.
- To create an open, emergent ecosystem of activities.
- To enable better filtering, search, automation and stats.
- To facilitate optimal, compelling, custom experiences.
- Coalescing, merging, and de-duping of data into information.
- The Why? from Microsoft’s partnership announcement on 11.10.2009
Activity Streams make it easy for partner sites to expose feed information or activity from their sites in a consistent format, once, so that their customers can import or connect what they’re doing on that site to other major services like Windows Live, MySpace, Facebook, etc. without their needing to implement service-specific tweaks to their feed. Likewise, service endpoints like Windows Live can expose a standard endpoint rather than implementing and maintaining custom feed ingestion for every partner.
- The Why? from Chris Messina’s presentation at the Open Stack meetup
- “One of the problems that we have right now is that people are essentially defined by the services that they use, as opposed to saying I want Dave’s updates across all these different sites because frankly I don’t care which site he’s on, I want to know what’s up with Dave. This software’s not at the point, because the technology’s not there yet, the protocols aren’t there yet, to enable that type of merging of identity.” (6:54-7:16)
- “I shouldn’t have to care where Dave is doing these things, I care about the content.”
How?
- Triples (plus context)
- Actor /verb/ “object” [context]
- gregoryfoster /tweeted/ “OMGWTFBBQ” [via TweetDeck]
- gregoryfoster /watched/ “Keyboard Cat” [on YouTube]
- gregoryfoster /added to profile/ “Some Willie Nelson Song” [on MySpace]
- Actor /verb/ “object” [context]
- Triples (plus indirect objects and context)
- Actor /verb/ “object” {indirect object} [context]
- gregoryfoster /bought/ “Crush It!” {for Kathy} [on Amazon]
- Actor /verb/ “object” {indirect object} [context]
More examples
- http://diso-project.org/wiki/activity-streams-examples
- Provides a good structure for elucidating uses of and additions to Activity Streams.
Activity Streams
- Initiated by the DiSo Project
- http://activitystrea.ms/
- Google Group
- First message June 16, 2008.
- Wiki
- The authoritative wiki has moved several times, but information is generally complementary.
- See also the DiSo wiki for Activity Streams.
Coverage of 01.08.2009 meeting at Six Apart
- http://www.readwriteweb.com/archives/google_facebook_myspace_activitystreams.php
- http://therealmccrea.com/2009/01/08/live-blogging-from-the-activity-streams-meetup/
- http://www.25hoursaday.com/weblog/2009/01/08/RepresentingRichMediaAndSocialNetworkActivitiesInRSSAtomFeeds.aspx
- http://blog.broadbandmechanics.com/2009/01/09/diso-activity-streams-standard/
Adopted by:
MySpace
- MySpace made available their activity streams API on February 25th, 2009 to a group of small partners. Yahoo! was their first partner going live on March 3rd, 2009.
- MySpace developer wiki: Standards for Activity Streams
- Exposes feeds of all of the activities of one’s friends as well.
- Uses OpenSocial for their Developer Platform (write once, run on any OpenSocial site)
- They also host MySpace Domain applications (native)
- MySpace has taken the tack of creating their own verbs and object types. They have exhibited a willingness to update their usage as the emerging specification is standardized (e.g. the Review object type). However, it does demonstrate a precedent for extension established by an active member of the group.
Windows Live
- Engineering the Windows Live / MySpace integration and Leveraging Activity Streams
- Partnership Announcement 11.10.2009
- Released 04.27.2009 as part of their Open Streams API
- Facebook developer wiki: Using Activity Streams
- You must have an interactive session with the user to acquire extended permission to read (read_stream) or publish (publish_stream) to their stream.
- Once your application has permission, you can query the user’s stream to retrieve their Atom Activity Streams feed.
- This last link has a sample syndicated stream one can query against.
Six Apart
- Movable Type Motion
- Looks to be a way to aggregate Activity Streams and cull mentions of particular keywords across the social web. Quite vague on details though.
- Movable Type Action Streams Plugin
- For MT 4.25
Opera
Key People Involved:
- Chris Messina, DiSo Project [ @chrismessina ]
- Monica Keller, MySpace [ @ciberch ]
- Rob Dolin, Microsoft [ @robdolin ]
- Dare Obasanjo, Microsoft [ @Carnage4Life ]
- Kevin Marks, BT [ @kevinmarks ]
- Martin Atkins, Six Apart [ @apparentlymart ]
- Ari Steinberg, Facebook
- Dave Recordon, Facebook (prev. Six Apart) [ @daveman692 ]
- Joseph Smarr, Plaxo [ @jsmarr ]
- John McCrea, Comcast [ @johnmccrea ]
Specs
Atom Activity Extensions
- Read the Specification
- This document presents an extension that allows activities on social objects to be expressed within the Atom Syndication Format.
- For the purpose of this specification, an activity is a description of an action that was performed (the verb) at some instant in time by some actor (the subject, as described in Section 6.1 (Feed Subject)), usually on some social object (the object). An activity feed is a feed of such activities.
- An activity may also have an indirect object. The indirect object is considered for the purposes of this specification to be a modifier of the activity and does not exist as a first-class object.
- …a given activity entry MAY have more than one activity:verb element, which indicates that there are several verbs describing this activity.
Atom Activity Base Schema
- Read the Specification
- Verbs
- Post
- Share: indicates that the Subject has called out the Object to readers.
- Save: indicates that the Subject has called out the Object as being of interest primarily to him- or herself.
- Mark as Favorite: indicates that the Subject marked the Object as an item of special interest.
- Play: indicates that the subject spent some time enjoying the object.
- Start Following: indicates that the Subject began following the activity of the Object.
- Make Friend: indicates the creation of a friendship that is reciprocated by the object.
- Join: indicates that the actor has become a member of the Object.
- Tag: indicates that the actor has identified the presence of a target inside another object. For example, the actor may have specified that a particular user appears in a photo.
- Object Types
- Article: indicates that the Object is an article, such as a news article, a knowledge base entry, or other similar construct.
- Blog Entry: indicates that the Object is an entry in a blog or some other similar construct.
- Note: represents short notes or status updates.
- File: represents some document or other file with no additional machine-readable semantics.
- Photo: represents a graphical still image.
- Photo Album: represents a collection of images.
- Playlist: represents an ordered list of time-based media items, such as video and audio objects.
- Video: represents video content, which usually consists of a motion picture track and an audio track.
- Audio: represents audio content.
- Bookmark: represents a pointer to some URL—typically a web page.
- Person: represents a user account. This is often a person, but might also be a company or ficticious character that is being represented by a user account.
- Group: represents a social networking group.
- Place: represents a location on Earth.
- Includes lat/lng using geo:point element.
- Comment: represents a textual response to another object.
- Context Elements
- Location: describes the location where the user was at the time the activity was performed.
- Mood: describes the mood of the user when the activity was performed.
- Annotation: an extra text-based note added to an activity by the user.
Here’s the process for adding new verbs for activity streams
Related Projects
YouTube
- FAQ: YouTube Subscriptions
- A YouTube subscription means subscribing to a user’s videos and their public activity (their favorites, their ratings, etc). By subscribing to a user, you’ll receive updates and stay informed when something new occurs.
- Data API Protocol
- OAuth support
- YouTube uses Atom with custom namespaced elements for their Data API
- Activity Feeds
- Includes user and friend activity feeds.
- At this time they are NOT using the Activity Streams schema.
- Reference Guide: Data API Protocol
gnip
- http://www.gnip.com/
- It looks like gnip is doing Activity Streams For Profit. They have developed the infrastructure for polling and tracking as many realtime data producing services as possible, rules for normalization, and delivery to requested endpoints.
JIRA Atlassian Activity Streams
MicroFormats
- http://microformats.org/wiki/activity-streams
- Naturally, a good example of “the MicroFormats process” for proposed additions to the lexicon.
- Focuses on the verb component.
SocialText
cliqset
- API Documentation for Activities
- Requests required to perform basic authentication over SSL.
- Defining their own resources as needed.
- Example: Atom+XML request of last 4 bookmarks to and from a user.
- Details on connecting to their streaming API
Ruby on Rails Plugins for Activity Streams
Related Technologies
- OAuth
- OpenID (and Attribute Exchange)
- XRDS/Simple
- WebFinger
- OpenSocial
- Atom Publishing Protocol
- OpenSearch (YouTube and Last.fm using this namespace when returning search results in XML)
- Salmon
- PubSubHubbub
- Universal Feed Parser
- Bill D’Ahorra “Seven Values of Atom”
- “FriendFeed’s MySQL schema for storing schema-less data”:http://bret.appspot.com/entry/how-friendfeed-uses-mysql
OAuth [ http://oauth.net/ ]
- http://oauth.net/
- http://en.wikipedia.org/wiki/OAuth
- OAuth allows a user to grant access to their information on one site (the Service Provider), to another site (called Consumer), without sharing all of their identity.
- OAuth is not an OpenID extension and thus is not restricted to use with OpenID.
- Read the Specification
- Google Group
- Beginner’s Guide to OAuth
- OAuth allows you to share your private resources (photos, videos, contact list, bank accounts) stored on one site with another site without having to hand out your username and password.
- Definitely the right tool for the job of permitting access to one’s Activity Stream.
Topics: 2009, Session | 2 Comments »


November 22nd, 2009 at 10:48 pm
Social comments and analytics for this post…
This post was mentioned on Twitter by gregoryfoster: A primer on #ActivityStreams as notes for my #NPOCamp session: http://bit.ly/npocamp-activitystreams...
November 23rd, 2009 at 12:23 am
Great summary — thanks!
Also, these posts might provide a useful historical context for this work:
http://factoryjoe.com/blog/2008/12/20/where-were-going-with-activity-streams/
http://factoryjoe.com/blog/2008/06/11/adding-richness-to-activity-streams/