python-3.x - 改进 Google API 调用
问题描述
我为调用 Google Places API 编写了一个函数,但我想让它变得更好。具体来说,我怀疑有更好的方法来处理可选参数,例如函数调用中的location
和radius
。如何在不编写可选参数的所有可能排列的情况下动态构建我的 url?
def get_data(query,api_key,radius=None,location=None):
if location==None and radius==None:
url="https://maps.googleapis.com/maps/api/place/textsearch/json?query=%s&fields=name,formatted_address,opening_hours,price_level,rating&key=%s" % (query,api_key)
elif location is not None:
url="https://maps.googleapis.com/maps/api/place/textsearch/json?query=%s&location=%s&fields=name,formatted_address,opening_hours,price_level,rating&key=%s" % (query,location, api_key)
elif location is not None and radius is not None:
url="https://maps.googleapis.com/maps/api/place/textsearch/json?query=%s&location=%s&radius=%s&fields=name,formatted_address,opening_hours,price_level,rating&key=%s" % (query,location,radius, api_key)
----Snip-----
解决方案
我认为这段代码可以解决您的问题:
base_url = 'https://maps.googleapis.com/maps/api/place/textsearch/json?'
params = {
'key': 'api_key',
'fields':'name,formatted_address,opening_hours,price_level,rating',
'query' : query
}
if location is not None:
params['location'] = location
if radius is not None:
params['radius'] = radius
url = base_url + urllib.urlencode(params)
推荐阅读
- javascript - 如何访问同一 javascript 对象的成员?
- r - 朴素贝叶斯模型在应用模型时未预测任何内容 - 预测函数以 0 因子水平返回
- scala - `Option.fold()()` 和 `Option.map().getOrElse()` 有什么区别?
- asp.net - Url.OriginalString 与 Url.AbsoluteUri
- android - 取消 RecyclerView 垂直投掷/滑动
- c# - 如何使用 id 数组在角度 4 中进行大规模删除
- scala - Spark Scala Dataframe - 用来自另一个数据帧的值替换/连接列值(但被转置)
- php - php简单检查在线离线用户状态
- javascript - 编译器不抛出“找不到模块”错误
- laravel - 雄辩:复杂的脚本