#!/usr/bin/python import os import urllib2 import xml.etree.ElementTree as ElementTree import cgi FLICKR_KEY = "[]" FLICKR_SECRET = "[]" def esc(s): return cgi.escape(s).encode('ascii', 'xmlcharrefreplace') class FlickrGeoSearch(object): """there are some minimal parameters for a call # time.gmtime(820483200) -> 8am 1996/1/1 (midnight Jan 1, 1996 Pacific) min_upload_date = 820483200 extras = geo o_format using: lat0, lon0, lat1, lon1 used as a convenience to replace bbox -- if bbox present, use bbox can now do radial searches e.g., http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key={flickr_key}&min_upload_date=820483200&lat=37.871343&lon=-122.258517&radius=2.0&radius_units=km&extras=geo bounding box """ def __init__(self,key,secret): self.key = key self.secret = secret def test1(self): """hard-coded call""" url = "http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=%(api_key)s&min_upload_date=820483200&lat=37.871343&lon=-122.258517&radius=2.0&radius_units=km&extras=geo" % \ {'api_key':self.key} response = urllib2.urlopen(url) body = response.read() return body def search(self,params): import urllib params["method"] = "flickr.photos.search" params["nojsoncallback"] = 1; params.setdefault("api_key",self.key) params["format"] = "json" url = "http://api.flickr.com/services/rest/?" + urllib.urlencode(params) response = urllib2.urlopen(url) body = response.read() return body class FlickrGeoPage(object): def process(self): # at minimum, need to handle flickrgeo?tags=flower&lat0=-90&lon0=-180&lat1=90&lon1=180&page=1&per_page=10&o_format=json # ignore other tags default_args = {'tags': '', 'lat0': 37.81778516606761, 'lon0': -122.34374999999999, "lat1": 37.92619056937629, "lon1": -122.17208862304686, "extras":"geo", "min_upload_date": 820483200, "page": 1, "per_page": 10 } #self.response.headers['Content-Type'] = 'text/html' print "Content-Type: application/json" print flickr_geo = FlickrGeoSearch(FLICKR_KEY, FLICKR_SECRET) # loop through default_args to fill in any defaults import cgi form = cgi.FieldStorage() parameters = {} for (key, default_val) in default_args.items(): val = form.getvalue(key) if val is None: parameters[key] = default_val else: parameters[key] = val # have to replace lat0/lon0/lat1/lon1 with bbox bbox = "%s,%s,%s,%s" % (str(parameters["lon0"]), str(parameters["lat0"]), str(parameters["lon1"]), str(parameters["lat1"])) del(parameters["lon0"]) del(parameters["lat0"]) del(parameters["lon1"]) del(parameters["lat1"]) parameters["bbox"] = bbox body = flickr_geo.search(parameters) print body #self.response.out.write(flickr_geo.test1()) #self.response.out.write("") #self.response.out.write("hello from FlickrGeo") ## http://code.google.com/appengine/docs/python/tools/webapp/requestclass.html#Request_arguments #args = self.request.arguments() #self.response.out.write("arguments: " + str(args)) #self.response.out.write("") def main(): flickrgeo = FlickrGeoPage() flickrgeo.process() if __name__ == "__main__": main()