2016-07-22 14 views
0

AlamoFireを使用して、Googleクラウド予測のモデルにPOSTクエリを実行しています。リクエストを送信するたびに、次のエラーが返されます。このAPIは、フォームエンコードされた入力の解析をサポートしていません。
少し調べたところ、Content-Type HTTPヘッダーを "application/json"に設定する必要があることがわかりました。うまくいけば、あなたが私の要求をするときに逃した何かを見つけることができます。ここに私のコードは次のとおりです。誰かがまだ答えを探している場合はAlamoFire Google Cloud Prediction APIのリクエストiOS Parse Error

let parameters = [ 
     "access_token" : accessToken, 
     "input": [ 
      "csvInstance": [ 
       "This is very positive" 
      ] 

     ] 
] 
Alamofire.Manager.sharedInstance.session.configuration 
      .HTTPAdditionalHeaders?.updateValue("application/json", 
               forKey: "Accept") 
Alamofire.Manager.sharedInstance.session.configuration 
      .HTTPAdditionalHeaders?.updateValue("application/json", 
               forKey: "Content-Type") 
Alamofire.request(.POST, "https://www.googleapis.com/prediction/v1.6/projects/mailanalysis-1378/trainedmodels/10kTweetData/predict", parameters: parameters).responseJSON { (response) in 
     if let JSON = response.result.value { 
      print("JSON: \(JSON)") 
      //print("refresh token = " + auth.accessToken) 
     } 
} 
+0

Alamofireはあなたのために、 'アプリケーション/ json'を扱います一度JSONシリアライザを 'requestJSON'メソッドで使用すると、通常のリクエストの代わりにそれを使うべきです –

+0

@VictorSigler requestJSONメソッドはどういう意味ですか?私はそれをどのように呼びますか?私はAlamofireの方法の1つとしてそれを見つけることができないようです – user3798602

+0

Uffは申し訳ありません私の間違いは、['responseJSON'](https://github.com/Alamofire/Alamofire#response-json-handler) –

答えて

0

、私はAlamofireせずに私のiOSクライアントからGooglePredictionAPIにアクセスするために管理:

var accessToken: String? 

    GIDSignIn.sharedInstance().currentUser.authentication.getTokensWithHandler { (authentication, error) in 

     if let err = error { 
      print(err) 
     } else { 
      if let auth = authentication { 
       accessToken = auth.accessToken 
      } 
     } 
    } 

    if let accTok = accessToken { 

     let parameters = [ 
         "input": [ 
          "csvInstance": [ 
           0.9, 
           0.14, 
           -0.41, 
           1.61, 
           -1.67, 
           1.57, 
           -0.14, 
           1.15, 
           0.26, 
           -1.52, 
           -1.57, 
           3.65 
          ] 

         ] 
        ] 

     let url = NSURL(string: "https://www.googleapis.com/prediction/v1.6/projects/ExermotePredictionAPI/trainedmodels/getExercise/predict") 

     let session = URLSession.shared 

     let request = NSMutableURLRequest(url: url! as URL) 
     request.httpMethod = "POST" //set http method as POST 

     do { 
      request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) 

     } catch let error { 
      print(error.localizedDescription) 
     } 

     request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.addValue("application/json", forHTTPHeaderField: "Accept") 
     request.addValue("Bearer \(accTok)", forHTTPHeaderField: "Authorization") 

     let task = session.dataTask(with: request as URLRequest, completionHandler: { data, response, error in 

      guard error == nil else { 
       return 
      } 

      guard let data = data else { 
       return 
      } 

      do { 
       if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: AnyObject] { 
        print(json) 
       } 

      } catch let error { 
       print(error.localizedDescription) 
      } 

     }) 

     task.resume() 
    }