我了解在处理拆分python URL方面已经有很多答案。但是,我想分割一个URL,然后在一个函数中使用它。
我在python中使用curl请求:
r = requests.get('http://www.datasciencetoolkit.org/twofishes?query=New%York')
r.json()
其中提供以下内容:
{'interpretations': [{'what': '',
'where': 'new york',
'feature': {'cc': 'US',
'geometry': {'center': {'lat': 40.742185, 'lng': -73.992602},
......
# (lots more, but not needed here)
我希望能够呼叫任何城市/位置,并且想分隔lat
和lng
。例如,我想调用一个可以输入任何城市的函数,并且该函数以纬度和经度作为响应。有点像this question(使用R)。
这是我的尝试:
import requests
def lat_long(city):
geocode_result = requests.get('http://www.datasciencetoolkit.org/twofishes?query= "city"')
我该如何解析它,以便只用城市调用该函数?
答案 0 :(得分:1)
以您的示例为例,我建议使用正则表达式和字符串插值。这个答案假设API每次都以相同的方式返回数据。
import re, requests
def lat_long(city: str) -> tuple:
# replace spaces with escapes
city = re.sub('\s', '%20', city)
res = requests.get(f'http://www.datasciencetoolkit.org/twofishes?query={city}')
data = res.json()
geo = data['interpretations'][0]['feature']['geometry']['center']
return (geo['lat'], geo['lng'])
答案 1 :(得分:0)
您可以在“解释”列表中循环查找城市名称,并在找到正确的城市时返回坐标。
public static void Register(HttpConfiguration config)
{
// Json settings
config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented;
// DIES HERE - when hitting DefaultSettings
JsonConvert.DefaultSettings = () => new JsonSerializerSettings()
{
ContractResolver = new CamelCasePropertyNamesContractResolver(),
Formatting = Newtonsoft.Json.Formatting.Indented,
NullValueHandling = NullValueHandling.Ignore,
};
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}