Niklas Rosencrantz
Niklas Rosencrantz

Reputation: 26681

How to encode my url parameter in google app engine?

I do geocoding with python and I think I need to encode the variable region with urllencode so that it works with content that has whitespace and other special characters:

url = urllib.urlencode('http://maps.googleapis.com/maps/api/geocode/json?address='+region+'&sensor=false')
logging.info('url:'+url)
result = urlfetch.fetch(url)

It generates an error log when the variable region contains a whitespace

Traceback (most recent call last):
  File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.3/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/base/data/home/apps/s~montaoproject/pricehandling.355268396595012751/in.py", line 153, in get
    url = urllib.urlencode('http://maps.googleapis.com/maps/api/geocode/json?address='+region+'&sensor=false')
  File "/base/python27_runtime/python27_dist/lib/python2.7/urllib.py", line 1275, in urlencode
    raise TypeError
TypeError: not a valid non-string sequence or mapping object

The background is another question I asked where I had I problem that I'm troublehhotting to be that the code works but not for regions that are two or more words ie names with whitespaces.

https://stackoverflow.com/questions/8441063/how-should-i-use-urlfetch-here

On production I used another variable. I thought it did not matter that it had whitespace. When I try variables that do not contain whitespace it works. So could you please tell me how I should encode the url variable to admit whitespace and other "special" characters?

Thank you

Upvotes: 1

Views: 3469

Answers (2)

Marian Borca
Marian Borca

Reputation: 11

Use urllib.pathname2url, it works directly on a single string value, no need for a dictionary

Upvotes: 1

ukessi
ukessi

Reputation: 1391

Just encode your querystring part

Like:

param = {"address" : region,
        "sensor" : "false"
        }

or

param = [("address", region), ("sensor", "false")]

then

encoded_param = urllib.urlencode(param)
url = 'http://maps.googleapis.com/maps/api/geocode/json'
url = url + '?' + encoded_param
result = urlfetch.fetch(url)

Upvotes: 6

Related Questions