Subject: [CODE4LIB] web services and widgets: MAJAX 2, ticTOC lookup, Link/360 JSON, and Google Book Classes

From: Godmar Back <[email-masked]>
Date: Tue, 19 May 2009 00:03:16 -0400

Hi,

I would like to share a few pointers to web services and widgets
Annette and I recently collaborated on. All are available under an
open source license.

"Widgets" are CSS-styled HTML elements (<span> or <div>) that provide
dynamic behavior related to the underlying web service. These are
suitable for non-JavaScript programmers familiar with HTML/CSS.

1. MAJAX 2: Includes a JSON web service (e.g.,
http://libx.lib.vt.edu/services/majax2/isbn/1412936373 or
http://libx.lib.vt.edu/services/majax2/isbn/006073132x?opacbase=http%3A%2F%2Flibcat.lafayette.edu%2Fsearch&jsoncallback=majax.processResults
) and a set of widgets to include results into web pages, see
http://libx.lib.vt.edu/services/majax2/  Supports the same set of
features as MAJAX 1 (libx.org/majax)
Source is at http://code.google.com/p/majax2/

2. ticTOC lookup: is a Google App Engine app that provides a REST
interface to JISC's ticTOC data set that maps ISSN to URLs of table of
contents RSS feeds. See http://tictoclookup.appspot.com/
Example: http://tictoclookup.appspot.com/0028-0836 and optional
refinement by title:
http://tictoclookup.appspot.com/0028-0836?title=Nature
A widget library is available; see
http://laurel.lib.vt.edu/record=b1251610~S7 for a demo (shows floating
tooltips with table of contents preview via Google Feeds and places a
link to RSS feeds)  The source is at
http://code.google.com/p/tictoclookup/ and includes a stand-alone
version of the web service which doesn't use GAE. The widget library
includes support for integration into III's record display.

3. Google Book Classes at http://libx.lib.vt.edu/services/googlebooks/
- these are widgets for Google's Book Search Dynamic Links API.
Noteworthy is support for integration into III's OPAC on the search
results page ("briefcit.html"), on the so-called bib display page
("bib_display.html") and their "WebBridge" product via field
selectors, all without JavaScript. Source is at
http://code.google.com/p/googlebooks/

4. A Link/360 JSON Proxy.  See
http://libx.lib.vt.edu/services/link360/index.html
This one takes Serials Solution's Link/360 XML Service and proxies it
as JSON. Currently does not include a widget set. Caches results 24
hours to match db update frequency.  Source is at
http://code.google.com/p/link360/  Could be combined with a widget
library, or programmed to directly, to weave Link/360 holdings data
into pages.

All JSON services accept 'jsoncallback=' for cross-domain client-side
integration.  The libx.lib.vt.edu URLs are ok to use for testing, but
for production use we recommend your own server. All modules are
written in Python as WSGI scripts, requiring setup as simple as
mod_wsgi + .htaccess.

 - Godmar

---

From: "Boheemen, Peter van" <[email-masked]>
Date: Tue, 19 May 2009 14:26:39 +0200

Clever idea to put the TicToc stuff 'in the cloud'. How are you going to
keep it up-to-date ?

Peter 

-----Original Message-----
From: Code for Libraries [mailto:[email-masked]] On Behalf Of
Godmar Back
Sent: dinsdag 19 mei 2009 6:03
To: [email-masked]
Subject: [CODE4LIB] web services and widgets: MAJAX 2, ticTOC lookup,
Link/360 JSON, and Google Book Classes

Hi,

I would like to share a few pointers to web services and widgets Annette
and I recently collaborated on. All are available under an open source
license.

1. MAJAX 2: Includes a JSON web service (e.g.,
http://libx.lib.vt.edu/services/majax2/isbn/1412936373 or
http://libx.lib.vt.edu/services/majax2/isbn/006073132x?opacbase=http%3A%
2F%2Flibcat.lafayette.edu%2Fsearch&jsoncallback=majax.processResults
) and a set of widgets to include results into web pages, see
http://libx.lib.vt.edu/services/majax2/  Supports the same set of
features as MAJAX 1 (libx.org/majax) Source is at
http://code.google.com/p/majax2/

3. Google Book Classes at http://libx.lib.vt.edu/services/googlebooks/
- these are widgets for Google's Book Search Dynamic Links API.
Noteworthy is support for integration into III's OPAC on the search
results page ("briefcit.html"), on the so-called bib display page
("bib_display.html") and their "WebBridge" product via field selectors,
all without JavaScript. Source is at
http://code.google.com/p/googlebooks/

4. A Link/360 JSON Proxy.  See
http://libx.lib.vt.edu/services/link360/index.html
This one takes Serials Solution's Link/360 XML Service and proxies it as
JSON. Currently does not include a widget set. Caches results 24 hours
to match db update frequency.  Source is at
http://code.google.com/p/link360/  Could be combined with a widget
library, or programmed to directly, to weave Link/360 holdings data into
pages.

All JSON services accept 'jsoncallback=' for cross-domain client-side
integration.  The libx.lib.vt.edu URLs are ok to use for testing, but
for production use we recommend your own server. All modules are written
in Python as WSGI scripts, requiring setup as simple as mod_wsgi +
.htaccess.

 - Godmar

---

From: Godmar Back <[email-masked]>
Date: Tue, 19 May 2009 09:30:02 -0400

> Clever idea to put the TicToc stuff 'in the cloud'. How are you going to

By periodically reuploading the entire set (which takes about 15-20
mins), new or changed records can be updated. A changed record is one
with a new RSS feed for the same ISSN + Title combination; the data is
keyed by ISSN+Title. This process can be optimized by only uploading
the delta (you upload .csv files, so the delta can be obtained easily
via comm(1)).

Removing records is a bit of a hassle since GAE does not provide an
easy-to-use interface for that. It's possible to wipe an entire table
clean by repeatedly deleting 500 records at a time (the entire set is
about 19,000 records), then doing a fresh import. This can be done by
uploading a "console" application into the cloud.
(http://con.appspot.com/console/help/about ) Alternatively, smaller
sets of records can be deleted via a "remove" handler, which I haven't
implemented yet.  A script will need to post the data to be removed
against the handler. Will do that though if anybody uses it. User
impact is low if old records aren't removed.

A possible alternative is to have the GAE app periodically verify the
validity of each requested record with a server we'd have to run.
(Pulling the data straight from tictocs.ac.uk doesn't work since it's
larger what you're allowed to fetch.) This approach would somewhat
defeat the idea of the cloud since we'd have to rely on keeping that
server operational, albeit at a lower degree of availability and load.

Another potential issue is the quota Google provides: you get 10GBytes
and 1.3M requests free per 24 hour period, then they start charging
you ($.12 per GByte)

I think I mentioned in my post that I included a non-GAE version of
the server that only requires mod_wsgi. For that standalone version,
keeping the data set up to date is implemented by checking the last
mod time of its localy copy - it will reread its data when it detects
a more recent jrss.txt in its current directory, so keeping its data
up to date is a simple a periodically curling
http://www.tictocs.ac.uk/text.php

 - Godmar