我设法使用webapp2编写一个简单的Python应用程序来向Google地图发出请求。当我运行本地服务器时,请求是有效的,一切正常。我将我的内容上传到谷歌的应用引擎并进行了部署。由于环境的变化,当我发出请求时,我的应用引擎配置中未列出IP地址。每次添加地址时,地址都会改变。
长话短说:运行webapp2的python应用程序在本地调用谷歌地图,但在部署在应用程序引擎上时无法调用。
我应该使用特定的模块/库吗?我到处寻找,但大多数解决方案已被弃用或要求使用google.appengine.api,这似乎不像我需要的那样。
编辑
这是代码。 API调用在mapRequests.getMapRequests()中进行 当您运行本地服务器并访问
时__初始化__。PY
import webapp2
import json
import cgi
import config
from mapRequests import *
class MainPage(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.write('**************************')
class mapHandler(webapp2.RequestHandler):
def get(self,requestType,latitudeUser=None,longitudeUser=None,radius=None,query=None,referenceId=None):
finder = mapRequests()
self.response.headers['Content-Type'] = 'text/plain'
latitudeUser = cgi.escape(self.request.get('latitudeUser'))
longitudeUser = cgi.escape(self.request.get('longitudeUser'))
radius = cgi.escape(self.request.get('radius'))
query = cgi.escape(self.request.get('query'))
referenceId = cgi.escape(self.request.get('referenceId'))
options = {
'nearby' : finder.getMapRequest(latitudeUser,longitudeUser,radius,query),
'location' : finder.getRestaurantQuery(referenceId)
}
self.response.write(options[requestType])
self.response.write(finder.getMapRequest(latitudeUser,longitudeUser,radius,query))
app = webapp2.WSGIApplication([
('/', MainPage),
('/map/(nearby|location)/',mapHandler)
], debug=True)
mapRequests.py
import json
import config
import urllib
class mapRequests():
def __init__(self):
self.error = {'status': 'FAIL'}
return
# Get nearby locations within specified radius
def getMapRequest(self,latitudeUser,longitudeUser,radius,query):
....
val = {
'location': latitudeUser+','+longitudeUser,
'radius': radius,
'name': query,
'type': 'food',
'key': config.GOOGLE_PLACES_KEY
}
params = urllib.urlencode(val)
resp = urllib.urlopen("https://maps.googleapis.com/maps/api/place/nearbysearch/json?%s" % params)
return resp.read()
# Get additional details about a particular location
def getRestaurantQuery(self,referenceId):
if not referenceId:
self.error['referenceId'] = 'MISSING'
return(json.dumps(self.error))
return "Looking for a place\n"
这是Google在应用引擎上部署并运行时响应的内容
{
"error_message" : "This IP, site or mobile application is not authorized to use this API key. Request received from IP address 107.178.195.162, with empty referer",
"html_attributions" : [],
"results" : [],
"status" : "REQUEST_DENIED"
}
当我说IP发生变化时,我的意思是当我将这里看到的IP添加到我的开发者控制台中的白名单中,然后再次运行请求时,它会发生变化。 虽然唯一的相似之处是107.178。()。()子网,所以我会像这里提到的那样修补它。我会回复你的。 还有其他任何建议吗?
答案 0 :(得分:1)
更改您的API密钥,以允许Google App引擎服务器的整个子网向Google API发出请求
在这种情况下,将107.178.0.0/16添加到您的凭据