Upload
martin-hamilton
View
1.010
Download
5
Embed Size (px)
Citation preview
The Future is Here:It’s Just Not Evenly Distributed
Martin Hamilton
http://martinh.net
@martin_hamilton
Photo by Sarath Sreekumar via Flickr
my.Lboro
• New site bringing together student info:
–Google Email, Calendar and Docs
–Learn (Moodle) VLE
–Library Services
–Newsfeeds and key links
• This talk: How it works :-)
App, or website?
But First…
Diagram credit: Andy Powell
About Me
Now Back to The Programme…
RSS/ATOM
• It’s all around you
<link href=“…” rel=“alternate”
type=“application/rss+xml” />
• But it might need a clean up
– Consider implications of embedded HTML
ATOM Sample with Namespaces
<item><title>Cake/Pie.</title><pubDate>Mon, 12 Dec 2011 00:37:46 +0000</pubDate><link>http://lsucs.org.uk/threads/cake-pie.5963/</link><guid>http://lsucs.org.uk/threads/cake-pie.5963/</guid><author>Lord_Infamy</author><dc:creator>Lord_Infamy</dc:creator><slash:comments>1</slash:comments></item>
Newsfeeds on my.Lboro
RSS aggregator written in Perl. Choses newsfeeds based on staff/student status
Google Docs:
DocumentsListAPI via Zend, with 2 Legged OAuth
Time for a REST
GET/feeds/documents/private/full?xoauth_requestor_id=f.j.bloggs-08%40student.lboro.ac.uk HTTP/1.1
Host: docs.google.com
Connection: close
User-Agent: Lboro.ac.uk-My-2.1 Zend_Framework_Gdata/1.11.1
Accept-encoding: identity
Authorization: Oauth realm=”X", oauth_consumer_key=”Y",
oauth_nonce=”Z", oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1323821672", oauth_version="1.0",
oauth_signature="4hfRnByN%2F2DZya8t797CQqPmCTg%3D”
'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER,'version' => '1.0’, 'signatureMethod' => 'HMAC-SHA1','consumerKey' => ‘XXX’, 'consumerSecret' => ‘YYY’
);
$config = new Zend_Oauth_Consumer($options);$token = new Zend_Oauth_Token_Access();$httpClient = $token->getHttpClient($options);$client = new Zend_Gdata_Docs($httpClient);
$feed = $client->getDocumentListFeed('https://docs.google.com/feeds/documents/private/full?xoauth_requestor_id=' . urlencode($email_address));
foreach ($feed->entries as $entry) {$title = $entry->title; $href = $link->getHref();print "<li><a target='_gdocs' href='$href'>$title</a></li>\n";
}
<entry><id>https://docs.google.com/feeds/documents/private/full/spreadsheet%3A0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc</id><published>2010-05-25T14:53:42.396Z</published><updated>2010-05-25T15:02:10.470Z</updated><category scheme='http://schemas.google.com/g/2005/labels'term='http://schemas.google.com/g/2005/labels#viewed'label='viewed'/><category scheme='http://schemas.google.com/g/2005#kind'term='http://schemas.google.com/docs/2007#spreadsheet'label='spreadsheet'/><title type='text'>Single Sign-On target services</title><content type='text/html’ src='https://docs.google.com/feeds/download/spreadsheets/Export?key=0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc&[email protected]'/><link rel='alternate' type='text/html'href='https://docs.google.com/a/student.lboro.ac.uk/spreadsheet/ccc?key=0AtfqxZt971TSdFFvQlRTZ3VpRkVyYkZERnVxclZMMXc&hl=en_US'/><link rel='http://schemas.google.com/spreadsheets/2006#worksheetsfeed’ type='application/atom+xml’ href='https://spreadsheets.google.com/feeds/worksheets/0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc/private/full'/>
<linkrel='edit-media' type='text/html'href='https://docs.google.com/feeds/media/private/full/spreadsheet%3A0AtfqxZt971TSdFFvQlRTZ3ZpRkVyYkZERnVxclZMMXc/[email protected]'/><author><name>f.j.bloggs-08</name><email>[email protected]</email>
</author><gd:resourceId>spreadsheet:0AtfqxZt971TSdFFvQlRTZ3VpRkVyYkZERnVxclZMMXc
</gd:resourceId><gd:lastModifiedBy><name>f.j.bloggs-08</name><email>[email protected]</email>
</gd:lastModifiedBy><gd:lastViewed>2011-10-06T21:29:56.187Z</gd:lastViewed><gd:quotaBytesUsed>0</gd:quotaBytesUsed><docs:writersCanInvite value='true'/></entry>
Gmail:
Zend Librarywith2 Legged OAuth
Google Calendar:
ZendLibrary with2 Legged OAuth
Learn widget:
MySQL connectionto underlyingMoodle software
Exported view ofUnderlying StudentInformation System
Budget widget:• MS SQL (ODBC) connection• Card vendor Web Services API• Home grown Library API
Putting It Together
Putting It Together
Visiting http://my.lboro.ac.uk:
– Shibboleth prompts for SSO login if necessary
• SAML response includes LDAP attributes from Active Directory, e.g. student ID
– Populates skeleton HTML of page
• Starts AJAX callbacks going to render widgets
• Choice of staff/student content
– Appearance driven via CSS + jQuery
Traps for the Unwary
• Are you using UTF-8 everywhere?
• SimpleXMLElement barfs on malformed XML
• How much intermediate caching to do?
• Do you even have APIs??
• 2 Legged OAuth not well understood
• REST good, SOAP bad – but use JSON rather than XML if you can
• print_r() and Data::Dumper are your friends!
Closing Thoughts
CMIS / Google Calendar
Add mobileVersion here
The Future is Here:It’s Just Not Evenly Distributed
Martin Hamilton
http://martinh.net
@martin_hamilton
Photo by Sarath Sreekumar via Flickr