Announcing zgw.py, or, how I stopped worrying and learned to love Z39.50
After more than a few late nights and long weekends, I'm proud to announce that I've completed my latest pet programming project. zgw.py is a lightweight Z39.50-Web gateway, written, naturally, in Python. None of this would be possible without the following Python modules: Aaron Lav's PyZ3950, the beast of burden; Ed Summers' pymarc, the smooth-talking translator; and web.py, quite possibly the best and most straightforward Python web framework available. I initially undertook this project as an excuse to play with PyZ3950 and to teach myself the workings of web.py; I'd played with Django, but it seemed entirely excessive for what I was working on.
First, I should mention that zgw.py isn't designed to be a complete implementation of a Z39.50 gateway. There are many areas in which there is much to be desired, and it's probably not as elegant as some would like. However, that wasn't the point of the project. My ultimate goal was to create a simple client that could be used as a starting point from which to develop a complete web application. The query syntax is pretty straight forward, as long as you're using CCL syntax. One can search either from a form, or by issuing a HTTP GET request to a specially formulated URL, e.g.:
- Author: /search/au="schellenberg, theodore"
- Title: /search/ti="describing archives a content standard"
- Keyword with boolean: /search/shakespeare and vietnamese
Although it's not entirely complete, I have tested it against a number of different Z39.50 servers and have been able to retrieve results accordingly. It's a fun toy, if nothing else...
Anyhow, if you'd like to play around with it, I have an active installation available online. Please be gentle and thoughtful in regard to your queries, though. If you'd like to look at the code and see how this has manifested itself, it's available online via Subversion at http://svn.matienzo.org/public/python/zgw/.