Locu API使用CURL提供此示例以执行位置敏感查询:
curl -X POST https://api.locu.com/v2/venue/search -d '{
"api_key" : "f165c0e560d0700288c2f70cf6b26e0c2de0348f",
"fields" : [ "name", "location", "contact" ],
"venue_queries" : [
{
"location" : {
"geo" : {
"$in_lat_lng_radius" : [-37.7750, 122.4183, 5000]
}
}
}]
}'
这是我在Swift中的尝试:
let LOCU_API_KEY = "<API_KEY>"
let centerLatitude = mapView.region.center.latitude
let centerLongitude = mapView.region.center.longitude
let arr = [centerLatitude,centerLongitude,5000]
let url = NSURL(string: "https://api.locu.com/v2/venue/search")
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
var params = ["api_key":LOCU_API_KEY,"fields":["name","location","contact"], "venue_queries":[["location":["geo":["$in_lat_lng_radius":arr]]]]] as [String:AnyObject!]
var err: NSError?
NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &err)
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: { (response:NSURLResponse!, data:NSData!, error:NSError!) -> Void in
if error == nil {
var err:NSError?
let httpResponse = response as NSHTTPURLResponse!
println(response.description)
if httpResponse.statusCode == 200 {
if var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error:&err) as? NSDictionary {
println(json)
}
}
}
})
我只获得HTTP 400 - Bad request
这个和各种简化,比如提供api_key。 Locu的版本1_0工作正常,但它没有我需要的功能。
答案 0 :(得分:1)
afRequestOperationManager.GET
正在执行GET
请求而不是POST
请求。
此外,请求数据必须是JSON,而您使用的是URL参数。
答案 1 :(得分:1)
正如其他人所说,你需要使用.POST
或者某个POST
请求而不是GET
。
此外,它看起来像这一行:
let urlString = "https://api.locu.com/v2/venue/"
应该是:
let urlString = "https://api.locu.com/v2/venue/search"
右?注意最后的“搜索”。这就是为什么你得到400我假设(404我想?!)。
告诉我们是否有效。
答案 2 :(得分:0)
curl命令的&#39; -X POST部分意味着您需要执行HTTP POST,而不是HTTP GET。
请尝试使用afRequestOperationManager.POST
。