Posts Tagged ‘Python’

WeoGeo API: Python Examples, Part 2

Tuesday, January 12th, 2010

The Developer Documentation for WeoGeo’s API provides examples using curl.  In this blog series, I’m providing similar examples but using Python.  In WeoGeo API: Python Examples, Part 1, I showed how to invoke the “GET Dataset as WeoFile” API from Python using urllib.  This time, I’ll show the same request using httplib.

Httplib is a little more complicated but it handles authentication slightly better and, more importantly, specifying the headers will enable more sophisticated requests (that will be required for later API examples).

The curl example for the API call is below:

List Datasets API: curl example

And here is a bare-bones example of that request in Python using httplib:

import base64
import string
import httplib, urllib

usern = "your_username" # or your API key
passw = "your_password" # if API Key is used: = ""
library = "the * part of your Library's domain name in *.weogeo.com"

# Construct the Basic authentication string
auth = 'Basic ' + string.strip(base64.encodestring(usern + ':' + passw))

# List Datasets (GET) curl example
# curl -H 'Content-Type: application/xml' http://#{hostname}/datasets.weo?page=1&east=0&north=90&south=0&west=-180&scale=5

# Optional parameters:
params = urllib.urlencode({
 'page': '1',
 'per_page': '15',
 'north': '90.0',
 'south': '-90.0',
 'east': '180.0',
 'west': '-180.0',
 'date_from': '1990-01-01',
 'date_to': '2010-01-01',
 'data_type': 'RASTER',
 'min_provider_rating': '0',
 'min_dataset_rating': '0',
 'tags': 'test'
})

# create the header with the authentication
headers = {
 "Content-Type": "application/xml" ,
 "Authorization": auth,
 }

# create teh connection
conn = httplib.HTTPConnection("dandye.weogeo.com")

# Construct the request with headers amd add paramters to the URI
conn.request("GET","/datasets.weo?%s" % params, "", headers)

# call the URI
response = conn.getresponse()

# check status of result
print response.status, response.reason

# read the data retreieved
data = response.read()

# close the connection
conn.close()

# print the data retreieved
print data

Notice on Line 9 that your username and password are base64 encoded.  This is basic access authentication and encoding != encrypting.  So for added security, you may use your Library API Key in place of your username and leave your password blank (password = “”).

Again, for extra credit, try changing the extension (on line 40) from “.weo” to [".kml",".json",".rss"].

WeoGeo API: Python Examples, Part 1

Thursday, January 7th, 2010

The Developer Documentation for WeoGeo’s API provides examples using curl:

curl example in WeoGeo Developer Documentation (wiki.weogeo.com)

curl example in WeoGeo Developer Documentation (wiki.weogeo.com)

However, after fielding some questions from Developers, I’m thinking some Python (and C#?) examples might be useful too.  So here is the first installment.

This is a bare-bones example of the List Datasets API, which returns a list of Datasets within the (optional) defined parameters.  Possible parameters include a Minimum Bounding Rectangle (MBR), date range, ratings, and/or Tags.

import urllib

usern = [your WeoGeo username]
passw = [your WeoGeo password]
library = [the * part of your Library's domain name *.weogeo.com]

# List Datasets (GET) curl example:
# curl -H 'Content-Type: application/xml' http://#{hostname}/datasets.weo?page=1&east=0&north=90&south=0&west=-180&scale=5

# Optional parameters:
params =  urllib.urlencode(
    {
        'page': 1,
        'per_page': '15',
        'north': '90.0',
        'south': '-90.0',
        'east': '180.0',
        'west': '-180.0',
        'date_from': '1990-01-01',
        'date_to': '2010-01-01',
        'data_type': 'RASTER',
        'min_provider_rating': '0',
        'min_dataset_rating': '0',
        'tags': 'test'
    }
)

# construct the URI for the API with parameters:
url = "https://%s:%s@%s.weogeo.com/datasets.weo?%s" % (usern,passw,library,params)

# call the URI
f = urllib.urlopen(url)

# print results to the CLI
print f.read()

For extra credit, try changing the extension from “.weo” to [".kml",".json",".rss"].

Next time, I’ll show the same WeoGeo API call in Python but use httplib instead of urllib.  Although, urllib is simpler, httplib handles authentication better and enables the more sophisticated requests that will be required for later API examples.

Embedding a KML File Index Into Your Website

Wednesday, September 23rd, 2009

WeoGeo Library Administrators and Market Providers can share or advertise their WeoGeo datasets outside of the WeoGeo website. For example, this TerraColor wiki entry demonstrates a map of the US with roll-over links to the individual Panel 5:CUSTOMIZE pages, where the datasets can be purchased.

Here, I want to demonstrate how to use WeoGeo APIs and some Python code to aggregate select WeoGeo Preview KML files into a “KML File Index”. This type of KML File Index can be used to share and market the content stored in your Library and Market accounts.

This example was developed for WeoGeo Market Provider ATLIS Geomatics, who requested an index of their WeoGeo Market Listings for their corporate web pages. They wanted one index for each of the cities where they held high resolution air photos.

WeoGeo provides an API for obtaining dataset details in the following formats WeoFile (XML), KML, and json. The wiki article shows how to curl the request but you can also preview the responses (in a web-browser) using the following URI structure:

http://market.weogeo.com/datasets/<token>.weo

For example:

http://market.weogeo.com/datasets/9a764fe6-3903-8151-b824-8a11a6f00552.kml

or

http://market.weogeo.com/datasets/9a764fe6-3903-8151-b824-8a11a6f00552.json

This is the same link found in the lower left corner of Panel 4:PREVIEW.

Preview KML

Preview KML

Those individual dataset KML file descriptions will be aggregated into a single KML File Index viewable within KML-readers like Google Earth, Bing Maps, ArcGIS Explorer, or NASA WorldWind.

Creating the KML File Index

  1. First, we need to obtain a list of tokens that uniquely identify the datasets to be included.  This can be accomplished with an API call.For example: curl -g -u <api key>: \
    'http://<subdomain>.weogeo.com/datasets.weo?&page=1&scale=0' > ./datasets.xml

    curl -g -u <api_key>: \
    'http://<subdomain>.weogeo.com/datasets.weo?&page=2&scale=0' >> ./datasets.xml
    ...
  2. Next, we extract the tokens from the resulting XML file and write them into a plain text file with one token per line.  A Python script for this step can be found in WeoGeo’s Public Code Repository.
  3. Lastly, a Python script is used to:
    1. invoke the WeoGeo API and obtain the KML Preview for each dataset (via it’s token)
    2. merge them into one KML File Index

There are also optional flags in this script to in/exclude the externally hosted preview image inside the wireframe or to create a stand-alone KMZ file that includes the preview images.

The resulting KML/KMZ can be viewed in a variety of applications including Google Maps, Google Earth, Bing Maps, OpenLayers, and many others.

http://kml.community.weogeo.com/ATLIS/atlis_calgary.kml

Using the Static URI embedded in each of the Preview KML files inside the KML File Index, ATLIS customers can now jump from an ATLIS web page directly to the WeoGeo Market page for that dataset.  This allows their customers to browse datasets on their website but customize and purchase on the WeoGeo Market. You can view the results on their Coverage Maps webpage.

To learn more about the APIs that were used, check out the WeoGeo API wiki pages. Also check out the Python code used to interact with the WeoGeo APIs and produce the KML File Index on Google Code.