2017-07-11 3 views
0

Je suis nouveau avec les API et j'essaie d'importer des données de l'API de l'aéroport de Schiphol. J'ai d'abord essayé ce lien dans ma requête, mais j'ai ensuite obtenu le résultat suivant.Utiliser CURL de l'API

https://api.schiphol.nl/public-flights/flights?app_id=////APPID////&app_key=////APPKEY////&includedelays=false&page=0&sort=%2Bscheduletime

result: {code = 406; description = "Can't retrieve version number from accept-header";} 

Je pense que je dois utiliser le CURL pour obtenir un résultat, mais je ne sais pas comment faire dans SWIFT 3.

CURL: curl -X GET --header "Accept: application/json" --header "ResourceVersion: v3" "https://api.schiphol.nl/public-flights/flights?app_id=////APPID////&app_key=////APPKEY////&includedelays=false&page=0&sort=%2Bscheduletime" 

Mon code maintenant ressemble à ceci:

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 


    let url = NSURL(string: "https://api.schiphol.nl/public-flights/flights?app_id=////APPID////&app_key=////APPKEY////&scheduledate=2017-07-11&airline=CND&includelays=false&page=0&sort=%2Bscheduletime")! 

    let task = URLSession.shared.dataTask(with: url as URL) { (data, response, error) -> Void in 
     if let urlContent = data { 
      do{ 
      let jsonResult = try JSONSerialization.jsonObject(with: urlContent, options: JSONSerialization.ReadingOptions.mutableContainers) 
      print(jsonResult) 
      } catch{ 
       print("failed") 
      } 
     } 
    } 
    task.resume() 
} 

Quelqu'un peut-il m'aider?

Répondre

1

Au lieu d'un simple URL, utilisez un URLRequest et ajoutez le champ d'en-tête.

Ceci est l'équivalent Swift de la syntaxe cURL:

let url = URL(string: "https://api.schiphol.nl/public-flights/flights?app_id=xxxxxxx&app_key=yyyyyyyyyyyyy5&scheduledate=2017-07-11&airline=CND&includelays=false&page=0&sort=%2Bscheduletime")! 
var request = URLRequest(url: url) 
request.addValue("v3", forHTTPHeaderField: "ResourceVersion") 

let task = URLSession.shared.dataTask(with: request) { (data, response, error) -> Void in ... 

J'ai fait les données personnelles anonymes.

Remarque: Ne passez aucune option dans JSONSerialization, l'option .mutableContainers est complètement inutile dans Swift.

let jsonResult = try JSONSerialization.jsonObject(with: urlContent) 
0

Selon les API documents dont vous avez besoin pour définir la ResourceVersion dans les en-têtes de l'appel.

Ce qui suit devrait fonctionner:

var req = URLRequest.init(url: URL.init(string: "https://api.schiphol.nl/public-flights/flights?app_id=//APPID//&app_key=//APPKEY//")!) 
    req.setValue("v3", forHTTPHeaderField: "ResourceVersion") 

    URLSession.shared.dataTask(with: req) { (data, response, error) in 
     print(try? JSONSerialization.jsonObject(with: data!, options: .init(rawValue: 4))) 
    }.resume()