ODSProgrammersGuideOpenSocial OpenSocial API support OpenSocial API support APIs supported The ODS package contains OpenSocial data APIs about people and activities. Also it implements a login compatible with GBase which can be used to perform OpenSocial API calls requiring authentication. The implementation code is located in the opensocial.sql file from the ods package. Authentication The authentication is compatible with GBase ClientLogin username/password authentication. REST API details URI: http://<cname>:<port>/feeds/login Parameters Uname - the ODS user account Passwd - password Return On success it will return: auth=NNNN where NNNN... is a security token and it matches a SID for login to ODS. If authentication fails it will return: Error=BadAuthentication Sample session $ curl -i "http://localhost/feeds/login?Uname=test&Passwd=secret" HTTP/1.1 200 OK Server: Virtuoso/05.00.3021 (Linux) i686-pc-linux-gnu VDB Connection: Keep-Alive Date: Wed, 14 Nov 2007 16:44:42 GMT Accept-Ranges: bytes Content-Type: text/plain; charset="ISO-8859-1" Content-Length: 38 auth=f305177cb1d9fbf409579250e944e980 People API The people API is implemented as described in http://code.google.com/apis/opensocial/docs/gdata/people/developers_guide_protocol.html The only difference is that personID is not a number but ODS user account. Sample Session Person data $ curl -i "http://localhost:8890/feeds/people/demo" HTTP/1.1 200 OK Server: Virtuoso/05.00.3021 (Linux) i686-pc-linux-gnu VDB Connection: Keep-Alive Date: Wed, 14 Nov 2007 16:49:27 GMT Accept-Ranges: bytes Content-Type: application/atom+xml; charset="ISO-8859-1" Content-Length: 1018 <entry xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005"> <id>http://localhost:8890/feeds/people/demo</id> <updated>2007-11-01T10:55:33.000+02:00</updated> <title>demo demo</title> <link rel="thumbnail" type="image/*" href="/DAV/home/demo/wa/images/me_avt.jpg"/> <link rel="alternate" type="text/html" href="http://localhost:8890/dataspace/person/demo"/> <link rel="self" type="application/atom+xml" href="http://localhost:8890/feeds/people/demo"/> <georss:where> <gml:Point xmlns:gml="http://www.opengis.net/gml"> <gml:pos>43.000000 25.000000</gml:pos> </gml:Point> </georss:where> <gd:extendedProperty name="lang" value="en-US"/> <gd:postalAddress label="Home"><![CDATA[ str. 123 apt. 45 New York USA ]]></gd:postalAddress> <gd:postalAddress label="Work"><![CDATA[ ]]></gd:postalAddress> <gd:phoneNumber label="Private" rel="http://schemas.google.com/g/2005#mobile">+359887563204</gd:phoneNumber> </entry> Friends $ curl -i "http://localhost:8890/feeds/people/demo/friends" HTTP/1.1 200 OK Server: Virtuoso/05.00.3021 (Linux) i686-pc-linux-gnu VDB Connection: Keep-Alive Date: Wed, 14 Nov 2007 16:50:14 GMT Accept-Ranges: bytes Content-Type: application/atom+xml; charset="ISO-8859-1" Content-Length: 2104 <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005"> <id>http://localhost:8890/feeds/people/demo/friends</id> <updated>2007-11-14T18:50:14.000+02:00</updated> <title>demo's Friends</title> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://localhost:8890/feeds/people/demo/friends"/> <link rel="self" type="application/atom+xml" href="http://localhost:8890/feeds/people/demo/friends"/> <author><name>demo</name></author> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005"> <id>http://localhost:8890/feeds/people/dav</id> <updated>2007-11-01T10:33:10.000+02:00</updated> <title>WebDAV System Administrator</title> <link rel="alternate" type="text/html" href="http://localhost:8890/dataspace/person/dav"/> <link rel="self" type="application/atom+xml" href="http://localhost:8890/feeds/people/dav"/> <georss:where> <gml:Point xmlns:gml="http://www.opengis.net/gml"> </gml:Point> </georss:where> <gd:extendedProperty name="lang" value="en-US"/> <gd:postalAddress label="Home"><![CDATA[ ]]></gd:postalAddress> <gd:postalAddress label="Work"><![CDATA[ ]]></gd:postalAddress> </entry> <entry xmlns="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005"> <id>http://localhost:8890/feeds/people/alice</id> <updated>2007-11-02T18:01:04.000+02:00</updated> <title>alice</title> <link rel="alternate" type="text/html" href="http://localhost:8890/dataspace/person/alice"/> <link rel="self" type="application/atom+xml" href="http://localhost:8890/feeds/people/alice"/> <georss:where> <gml:Point xmlns:gml="http://www.opengis.net/gml"> </gml:Point> </georss:where> <gd:extendedProperty name="lang" value="en-US"/> <gd:postalAddress label="Home"><![CDATA[ (Private Address), ]]></gd:postalAddress> <gd:postalAddress label="Work"><![CDATA[ ]]></gd:postalAddress> </entry> </feed> Activities API The activities API is implemented as described in http://code.google.com/apis/opensocial/docs/gdata/activities/developers_guide_protocol.html Creating entries To create a new entry client must be authenticated first, then it issue a POST request to the activities feed an Atom based xml representation like : <atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> <atom:updated>2007-10-29T19:00:51.574Z</atom:updated> <atom:category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/activities/2007#activities"/> <atom:title>I'm at work</atom:title> </atom:entry> The server will respond with entry containing atom:id element, below is a simple session for creating a new entry. The "ODS Auth" value is the sid value for the logged in user demo in ODS. curl -i -d "`cat act.xml`" -H "Authorization: ODS Auth=032a81d688a275910bd5ef31aff6d5ab" -H "Content-Type: application/atom+xml" "http://localhost:8890/activities/feeds/activities/user/demo/source/0" HTTP/1.1 201 Created Server: Virtuoso/05.00.3021 (Linux) i686-pc-linux-gnu VDB Connection: Keep-Alive Date: Thu, 15 Nov 2007 12:25:10 GMT Accept-Ranges: bytes Content-Type: application/atom+xml; charset="ISO-8859-1" Content-Length: 636 <entry xmlns="http://www.w3.org/2005/Atom"> <id>http://localhost:8890/activities/feeds/activities/user/demo/source/0/10</id> <updated>2007-11-15T14:25:10.000+02:00</updated> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/activities/2007#activity"/> <title>I'm at work</title> <link rel="self" type="application/atom+xml" href="http://localhost:8890/activities/feeds/activities/user/demo/source/0/10"/> <link rel="edit" type="application/atom+xml" href="http://localhost:8890/activities/feeds/activities/user/demo/source/0/10"/> <received>2007-11-15T14:25:10.000+02:00</received> </entry> Retrieving entries The feed retrieval is just a GET against user activities feed, e.g., GET http://localhost:8890/activities/feeds/activities/user/demo produces a Atom feed with users activities listed Updating entries The update is similar to entry creation, but in this case the HTTP method must be PUT and the Atom entry must contain a valid atom:id, for example: <?xml version="1.0"?> <entry xmlns="http://www.w3.org/2005/Atom"> <id>http://localhost:8890/activities/feeds/activities/user/demo/source/12/8</id> <updated>2007-10-27T19:41:51.574Z</updated> <category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/activities/2007#activity"/> <title>Another Edited title</title> <link rel="self" type="application/atom+xml" href="http://www.google.com/activities/feeds/activities/user/userID/source/sourceID/a1"/> <link rel="edit" type="application/atom+xml" href="http://www.google.com/activities/feeds/activities/user/userID/source/sourceID/a1"/> <received>2007-10-27T19:41:51.478Z</received> </entry> Deleting entries It's the same as update, just in this case the HTTP method is DELETE. In cases where clients do not support PUT/DELETE , the X-HTTP-Method-Override HTTP header is supported; i.e., DELETE can be represented by : POST /url HTTP/1.1 X-HTTP-Method-Override: DELETE .... CategoryODS CategoryVirtuoso CategoryWebSite