Published in
Geo, GeoRSS, Google
I was gone for 5 days to the Ontario Curling Association’s Colts Provincial Playdowns, the top-tier competition after playing down against 130 other curling teams. We held our own, but the competition was very stiff.
It was a tough time to be away, a lot of amazing news came out. First and foremost is that Google adds support for GeoRSS. This is exciting news because it demonstrates the maturity and interest in the syndication of geographic content in blogs, CMS’s, sites, and news.
This will also add a little bit of more difficulty moving forward in GeoRSS. Now that a major company has added support, and assumedly a lot more developers will add support now as well, then the specification has to be much more cognizant of future changes, users, and upgrades. Before, the specification was really guided by the majority of developers using the standard itself. If some spec was changed, we all went out and updated our libraries. Now, however, we really need to denote versions, and how users can update their tools to accomodate both the new version and backwards compatibility.
On top of that exciting news, Google also open-sourced part of the GoogleMaps library. See the
gmaps-utility-library-dev FAQ. Currently this is limited to the GMarkerManager, but demonstrates their interest in opening the library up for interesting projects, ideas, and hacks.
Published in
Mashup, Programming, Ruby, Web
Sunlight Labs has released a public API, their Sunlight Datakit. It’s a straight-forward, simple API for getting access to their Civic data, like Congressional Representatives, zipcodes, timezones, and some geographic information.
There is some basic information about elected representatives that makes politico mashups easier: the ability to tie a name to a state, the district and zip codes that they represent, their office telephone number, and so on. We have put together a simple labs “datakit” that does this for us, drawing from several publicaly available data sources. We are making this fully available and have provided a fully documented API for the methods we have developed for those sources. Find out about the datakit here.
Of course, any API needs a nice little client to tie it into your applications. Here is my Ruby client. It’s very simple, because is uses the fallback method_missing to handle any function passed to the class. This also allows the class to be extended by implementing specific methods if more processing of the response is needed.
require 'open-uri'
require 'rexml/document'
require 'cgi'
SUNLIGHT_HOST = 'http://sunlightlabs.com/datakit/'
class Sunlight
def self.method_missing(service_method, *args)
params = args[0].collect {|k,v| CGI.escape(k.to_s) + '=' + CGI.escape(v.to_s)}.join('&')
url = SUNLIGHT_HOST + service_method.to_s + "?" + params
open(url).read.split("|")
end
end
resp = Sunlight.getDistrictFromZip5({:zip => 20740})
puts resp.inspect
resp = Sunlight.getRepresentativeNameFromCityState({:city => 'Detroit', :state => "MI"})
puts resp.inspect
The Sunlight Datakit currently offers the following functions. Check out the documentation for information on the parameters and returned values.
- getDistrictFromZip5
- getStateFromZip5
- getDistrictFromZip9
- getStateFromZip9.php
- getRepresentativeNameFromDistrict
- getRepresentativePhoneNumberFromDistrict
- getRepresentativeRoomNumberFromDistrict
- getCityFromZip5
- getCityStateFromZip5
- getLatitudeFromCityState
- getLongitudeFromCityState
- getZipCodesFromCityState
- getTimezoneFromCityState
- getRepresentativeNameFromCityState
- getRepresentativeNameFromState
- getStateAbbreviationFromStateName
- getStateNameFromStateAbbreviation