将Locu的CURL命令转换为Swift

时间:2015-03-30 16:36:32

标签: swift afnetworking

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工作正常,但它没有我需要的功能。

3 个答案:

答案 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