Как закодировать мой параметр url в Google App Engine? - PullRequest
1 голос
/ 10 декабря 2011

Я делаю геокодирование с помощью python и думаю, что мне нужно кодировать переменную region с помощью urllencode, чтобы она работала с содержимым, имеющим пробелы и другие специальные символы:

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

Генерирует журнал ошибок, когда переменная область содержит пробел

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

Справочная информация - это еще один вопрос, который я задал, где у меня возникла проблема, я не могу понять, что код работает, но не для областей, которые являются двумя или более словами, то есть именами с пробелами.

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

На производстве я использовал другую переменную. Я думал, что это не имеет значения, что у него были пробелы. Когда я пытаюсь переменные, которые не содержат пробелов, это работает. Не могли бы вы, пожалуйста, сказать мне, как я должен кодировать переменную url для допуска пробелов и других «специальных» символов?

Спасибо

Ответы [ 2 ]

6 голосов
/ 10 декабря 2011

Просто закодируйте свою часть строки запроса

Как:

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

или

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

тогда

encoded_param = urllib.urlencode(param)
url = 'http://maps.googleapis.com/maps/api/geocode/json'
url = url + '?' + encoded_param
result = urlfetch.fetch(url)
1 голос
/ 26 октября 2014

Используйте urllib.pathname2url, он работает напрямую с одним строковым значением, словарь не нужен

...