Hadrian, remember the talk we had on ApacheCon 2009? I know I took almost a year to have this thing done. Sorry for taking so long! But here it goes.
I just want to state that Neociclo <http://www.neociclo.com> supported me a lot on achieving this. Not only we were able to code the Camel OFTP<http://accord.ow2.org/odetteftp>component but now also I had time and motivation to finish this component. *Camel Social* http://code.google.com/p/camel-social The component is a PoC to poll social stream path in a uniform way from social networks. Some features: - supports OAuth - supports Basic Auth (wrapped by a OAuth credentials object (token = username, secret = password) - supports uniform SocialData (a unique id and the data itself) - supports skip read social data (saves unique id for future polling and skip them) - supports custom social providers (just implement a SocialProvider) - supports Twitter out of the box - has Facebook and Foursquare classes ready to be implemented - supports RateLimitExceededException to sleep consumer thread for a while - supports session/non-session aware social providers - supports social data producer on social stream path *In a nutshell: * from("social://twitter/public?skipRead=true&delay=5000") .transform(xpath("//status/text/text()").stringResult()) .process(new Processor() { *public void* process(Exchange arg0) *throws* Exception { System.*out*.print(arg0.getIn().getHeader(SocialHeaders.*SOCIAL_DATA_ID*) + ": "); System.*out*.println(arg0.getIn().getBody()); } }); *How it works:* - there can be only one pair of OAuth consumer token and consumer secret (from client application) per endpoint - OAuth is not required but recommended because of data fetch rate limits (150 requests per hour on Twitter; 350 if "OAuthed") - endpoint can have user oauth token/secret. In this case, it will poll data. Otherwise it will work as event-based consumer - exchanges going to this endpoint's producer with OAUTH header user's token/secret and POLL_STREAM header to true will fire consumers to poll data for that user - exchanges going to this endpoint's producer with SOCIAL_DATA header to be updated will require user's OAuth either specified on the endpoint or within message headers - endpoint specifies the social (stream) path. For example, in Twitter provider there's support for user's home timeline and the public timeline. "social://twitter/home" or "social://twitter/public" - the provider must be able to return unique social data from the requested social path - social data is retrieved as is from the social network and can be retrieved on message body, processed either by XPath (case of Twitter/Foursquare provider) and JSON (case of Facebook) *Things to consider* - must the component require providers to present social data on unified format? (twitter can provide xml/json/rss; facebook provides only json) - must the one component's endpoint be able to stream social data for different client's oauth token/secret? Like it does per user *What's next?* - consider to move this component to Camel trunk - consider to have main social network providers (Twitter, Facebook, Foursquare, Orkut, Buzz) - optimize the data fetch process (take a look at AbstractTwitterPath) Now, I definitely need some help on this to provide better support for different social networks and social paths. Anybody interested? Cheers!! Bruno Borges www.brunoborges.com.br +55 21 76727099 "The glory of great men should always be measured by the means they have used to acquire it." - Francois de La Rochefoucauld