Announcing Cliqset FeedProxy (Activity Streams translation service)

5 views
Skip to first unread message

Darren Bounds

unread,
Dec 2, 2009, 10:59:26 AM12/2/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
Hey all,

I just wanted to give everyone a heads up about a Cliqset tool we just
rolled out this morning called FeedProxy. It's designed to make
Activity Streams more accessible to developers and users alike. Here's
the deal:

FeedProxy uses the same translation technology we've implemented to
normalize our Cliqset user activity streams but in a more generic way.
You simply select one of the 70+ supported services, define some
user/feed information and FeedProxy will generate a persistent
Activity Streams Atom feed URL for that service to use as an
alternative to reading and translating proprietary RSS/Atom feed
formats. This means that Twitter, Flickr, WordPress, Tumblr, etc, etc,
etc, RSS/Atom feeds are now normalized and accessible in Activity
Streams formatted Atom.

There's no need for a Cliqset account, you just generate your feed URL
via http://feedproxy.cliqset.com/ and you're set.

If you have a minute or two, check it out. Would love to hear any
feedback you have.

We're still refining some of the elements and will be adding new
features for defining the characteristics generic RSS/Atom feeds but
we think this is a great start and we're happy to be able to help push
Activity Streams forward.

Once again, let me know if you have any questions, comments or problems.


FYI: Here's a Twitter example.

Example 1: Twitter

The default feed looks like this: (via
http://twitter.com/statuses/user_timeline/dbounds.rss)

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"
xmlns:georss="http://www.georss.org/georss">
<channel>
<title>Twitter / dbounds</title>
<link>http://twitter.com/dbounds</link>
<atom:link type="application/rss+xml"
href="http://twitter.com/statuses/user_timeline/dbounds.rss"
rel="self"/>
<description>Twitter updates from Darren Bounds / dbounds.</description>
<item>
<title>dbounds: @alex Of course. Just let me know when and where.</title>
<description>dbounds: @alex Of course. Just let me know when and
where.</description>
<pubDate>Tue, 01 Dec 2009 02:37:55 +0000</pubDate>
<guid>http://twitter.com/dbounds/statuses/6222118706</guid>
<link>http://twitter.com/dbounds/statuses/6222118706</link>
</item>
</channel>
</rss>


Now take a look at the Activity Streams feed generated by Cliqset
FeedProxy: (via
http://api.cliqset.com/feed/?svcuser=dbounds&feedid=twitternotesposted)

<feed xmlns="http://www.w3.org/2005/Atom">
<entry xmlns:service="http://activitystrea.ms/service-provider"
xmlns:activity="http://activitystrea.ms/spec/1.0/">
<activity:verb>http://activitystrea.ms/schema/1.0/post</activity:verb>
<published>2009-12-01T02:37:55.000Z</published>
<title type="text">dbounds: @alex Of course. Just let me know when
and where.</title>
<summary type="html">@alex Of course. Just let me know when and
where.</summary>
<service:provider>
<name>twitter</name>
<uri>http://twitter.com</uri>
<icon>http://cliqset-services.s3.amazonaws.com/twitter.png</icon>
</service:provider>
<activity:object>
<activity:object-type>http://activitystrea.ms/schema/1.0/note</activity:object-type>
<content type="text">@alex Of course. Just let me know when and
where.</content>
<link rel="alternate" type="text/html"
href="http://twitter.com/dbounds/statuses/6222118706" />
</activity:object>
<activity:object xmlns:poco="http://portablecontacts.net/spec/1.0">
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
<title type="text">dbounds</title>
<poco:name>
<poco:givenName>Darren</poco:givenName>
<poco:familyName>Bounds</poco:familyName>
</poco:name>
</activity:object>
<author>
<name>dbounds</name>
</author>
<link href="http://twitter.com/dbounds/statuses/6222118706" />
</entry>



--
Darren Bounds
dar...@cliqset.com
http://cliqset.com/

James Falkner

unread,
Dec 2, 2009, 11:42:54 AM12/2/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
Pretty cool, Darren.. how do you normalize the author names that you include
in the poco elements? For example, the base twitter feed only has no author
information (other than in the content itself, not really parsable).
But in your
proxied feed, you have a valid <poco> element with your full name.

We in Community Equity are always struggling with normalizing authors when
reading from a bunch of different services / feeds because we are
calculating
a given person's equity across the web and need to match authors to
information
coming from disparate sources. This could be a step forward in a solution.

-jhf-

Darren Bounds

unread,
Dec 2, 2009, 12:06:32 PM12/2/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
Thanks James,

We use whatever information we have available. Twitter puts the users
full name in the Atom description which we attempt to parse and use in
author. The author detail will vary from service to service.

e.g:
<title>Twitter / dbounds</title>
<link>http://twitter.com/dbounds</link>
<atom:link type="application/rss+xml"
href="http://twitter.com/statuses/user_timeline/14402132.rss"
rel="self"/>
<description>Twitter updates from Darren Bounds / dbounds.</description>
<language>en-us</language>

Darren
> --
>
> You received this message because you are subscribed to the Google Groups "Activity Streams" group.
> To post to this group, send email to activity...@googlegroups.com.
> To unsubscribe from this group, send email to activity-strea...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/activity-streams?hl=en.
>
>
>



--
darren bounds
dar...@cliqset.com

Bill de hOra

unread,
Dec 2, 2009, 2:26:21 PM12/2/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
Hi Darren,

Nice work. The feeds need fixing up:

- atom:feed has no atom:title

- using atom:published, which is optional not but atom:updated, which is
the required one.

- doesn't have atom:id in atom:feed or atom:entry.

Those last two also mean no support for aggregator sync in Atom
(algorithm: page back to the last id/updated pair you've recognize then
stop).


Bill

Beau Lebens

unread,
Dec 2, 2009, 2:48:50 PM12/2/09
to activity...@googlegroups.com
Really cool stuff Darren - reminds me of the work I used to do on
FeedBlendr.com ;)

Noticed you also need the XML prolog at the top of your output feeds.

B

Darren Bounds

unread,
Dec 2, 2009, 2:52:36 PM12/2/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
Thanks Bill,

Good catch. Update forthcoming.

Darren

Darren Bounds

unread,
Dec 2, 2009, 5:18:05 PM12/2/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
FYI, we've deployed an update to address these issues.

Thanks again for pointing them out.

Darren

On Wed, Dec 2, 2009 at 2:26 PM, Bill de hOra <bi...@dehora.net> wrote:

Monica Keller

unread,
Dec 3, 2009, 10:56:26 AM12/3/09
to activity...@googlegroups.com
Awesome Darren sounds like you just built Gnip :)
Can't wait to play with it

Alexander Zhuravlev

unread,
Dec 3, 2009, 11:59:02 AM12/3/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
It looks like this XML element (activity:object above) should be
replaced with the <activity:actor> one.

According to
http://martin.atkins.me.uk/specs/activitystreams/atomactivity#activityobjectelement

"Activity processors SHOULD handle multi-object activities as distinct
activities"

and "The activity:actor element MAY be used to describe the object that
performed the activity. "

I believe in terms of twitter status update activity the XML element
above should be replaced with information about person/actor who posted
the status update as follows:

<activity:object xmlns:poco="http://portablecontacts.net/spec/1.0">

<activity:object-type>http://activitystrea.ms/scheme/1.0/person</activity:object-type>
<title type="text">dbounds</title>
<poco:name>
<poco:givenName>Darren</poco:givenName>
<poco:familyName>Bounds</poco:familyName>
</poco:name>
</activity:actor>

Alexander Zhuravlev

unread,
Dec 3, 2009, 12:15:47 PM12/3/09
to activity...@googlegroups.com
Oops. I meant with this one:

<activity:actor xmlns:poco="http://portablecontacts.net/spec/1.0">
<activity:object-type>http://activitystrea.ms/schema/1.0/person</activity:object-type>
<title type="text">dbounds</title>
<poco:name>
<poco:givenName>Darren</poco:givenName>
<poco:familyName>Bounds</poco:familyName>
</poco:name>
</activity:actor>
--
Alexander Zhuravlev

Charlie Cauthen

unread,
Dec 3, 2009, 1:06:33 PM12/3/09
to activity...@googlegroups.com
Thanks Alexander.  We are correcting this now.  The update should be deployed this afternoon.

Thanks,
Charlie

Chris Messina

unread,
Dec 7, 2009, 12:52:44 AM12/7/09
to diso-p...@googlegroups.com, activity...@googlegroups.com
Props Darren, this is great. 

I actually worked on a project that did exactly what your FeedProxy does while I was at Vidoop, but, with Vidoop so went the project. I'm tickled pink that you've released this and made it available!

I'd love to know what kind of verbs we're missing, and what issues you ran into while implementing this. It'd also be great to hear from folks who are using the proxy in terms of how they're using, and what issues they might be encountering.

This is exciting! 

Chris




--

You received this message because you are subscribed to the Google Groups "Diso Project" group.
To post to this group, send email to diso-p...@googlegroups.com.
To unsubscribe from this group, send email to diso-project...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/diso-project?hl=en.





--
Chris Messina
Open Web Advocate

Personal: http://factoryjoe.com
Follow me on Twitter: http://twitter.com/chrismessina

Citizen Agency: http://citizenagency.com
Diso Project: http://diso-project.org
OpenID Foundation: http://openid.net

This email is:   [ ] shareable    [X] ask first   [ ] private

Darren Bounds

unread,
Dec 7, 2009, 2:00:39 PM12/7/09
to activity...@googlegroups.com, diso-p...@googlegroups.com
Thanks Chris.

We'll write something up that describes our experience building this
out and any of the hurdles we ran into.

And yes, if anyone has any issues, requests, whatever, please let me know.

Darren
> "Activity Streams" group.
> To post to this group, send email to activity...@googlegroups.com.
> To unsubscribe from this group, send email to
> activity-strea...@googlegroups.com.
> For more options, visit this group at

Chris Messina

unread,
Feb 23, 2010, 9:37:48 PM2/23/10
to Darren Bounds, activity-streams
Hey Darren,

Just circling back on this — did you ever produce documentation on
your experience doing the "up conversion" of all these services? ;)

Chris

> >>viahttp://feedproxy.cliqset.com/and you're set.

Darren Bounds

unread,
Feb 23, 2010, 9:46:11 PM2/23/10
to Chris Messina, activity-streams
Uhm... nope! Thanks for the reminder.

Will get with the team tomorrow and see where we are. Regardless,
we'll *try* to pull something together within a couple weeks.

Darren

--
darren bounds
dar...@cliqset.com

Chris Messina

unread,
Feb 23, 2010, 9:51:23 PM2/23/10
to Darren Bounds, activity-streams
No problem!

Feel free to use the ActivityStreams wiki if you want to write something about "implementing" or "converting to the AS format" — even a couple bullet points would be a great start.

Thanks!

Chris
Open Web Advocate, Google

Personal: http://factoryjoe.com
Follow me on Buzz: http://buzz.google.com/chrismessina
...or Twitter: http://twitter.com/chrismessina
Reply all
Reply to author
Forward
0 new messages