2016-12-30 7 views
1

Я пытаюсь сформировать свой запрос к API облачного естественного языка Google на основе этого кода https://cloud.google.com/natural-language/reference/rest/v1/documents в Swift, но я не могу получить синтаксис правильно?Выполнение вызова Google Cloud API естественного языка с использованием Swift 3.0

import Foundation 
import SwiftyJSON 

class GoogleNaturalLanguageParser { 

    let session = URLSession.shared 
    var googleAPIKey = "XXX" 
    var googleURL: URL { 
     return URL(string: "https://language.googleapis.com/v1/documents:analyzeEntities?key=\(googleAPIKey)")! 
    } 
    //TODO: Add document 

    private func createRequest(with text: String, handler: @escaping (String) -> Void) { 
     // Create our request URL 

     var request = URLRequest(url: googleURL) 
     request.httpMethod = "POST" 
     request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
     request.addValue(Bundle.main.bundleIdentifier ?? "", forHTTPHeaderField: "X-Ios-Bundle-Identifier") 

      // Build our API request 
    let jsonRequest = [ 
     "requests": [ 
     ["encodingType": "UTF8", 
      "document": [ 
       "type": "PLAIN_TEXT", 
       "content": text 
      ] 
     ] 
     ] 

    ] 
     let jsonObject = JSON(jsonDictionary: jsonRequest) 
     //let jsonObject = JSONSerialization.jsonObject(with: jsonRequest, options: []) as? [String : Any] 

     // Serialize the JSON 
     guard let data = try? jsonObject.rawData() else { 
      return 
     } 

     request.httpBody = data 



     // Run the request on a background thread 
     DispatchQueue.global().async { self.runRequestOnBackgroundThread(request, handler: { (result) in 
      handler(result) 
     }) } 

    } 


} 
+0

Поскольку вы получаете 404, хороший способ отладки это на самом деле сбросить URL вы формируете и сравниваете его с тем, который вы пытаетесь сформировать. – Adam

ответ

3

Прежде всего, вы вызываете API видения в своем базовом URL-адресе. Вы должны быть вызовом API Natural Language, а не видение:

https://vision.googleapis.com/v1/documents:annotateText?key=\(googleAPIKey)

Тогда, это зависит от того, что вы пытаетесь сделать, то есть чувства, сущности, или синтаксический анализ. Поскольку нет iOS-клиента lib, вам придется самостоятельно выполнить запрос (как вы уже определили). Будем надеяться, что официальные документы достаточно, чтобы ты:

Настроения:

Протокол here. Например:

https://language.googleapis.com/v1/documents:analyzeSentiment?key=

{ 
    "encodingType": "UTF8", 
    "document": { 
    "type": "PLAIN_TEXT", 
    "content": "Enjoy your vacation!" 
    } 
} 

Entities:

протокола here. Например:

https://language.googleapis.com/v1/documents:analyzeEntities?key=

{ 
    "encodingType": "UTF8", 
    "document": { 
    "type": "PLAIN_TEXT", 
    "content": "President Obama is speaking at the White House." 
    } 
} 

Синтаксис:

протокола here. Например:

https://language.googleapis.com/v1/documents:analyzeSyntax?key=

{ 
    "encodingType": "UTF8", 
    "document": { 
    "type": "PLAIN_TEXT", 
    "content": "Hello, world!" 
    } 
} 

Swift 3,0 эквивалент будет что-то вроде этого:

let jsonObject: [String:Any] = [ 
    "document": [ 
     "type": "PLAIN_TEXT", 
     "content": "Michelangelo Caravaggio, Italian painter, is known for the Calling of Saint Matthew."], 
     "encodingType": "UTF8" 
] 
+0

Код, который вы отправили для API Cloud Vision, для которого у них есть пример проекта Swift, у них нет кода Swift для API естественного языка, который был опубликован в моем вопросе. – GarySabo

+0

@GarySabo - да, вы правы. Я посмотрю, смогу ли я найти пример для NL и соответствующим образом обновить свой ответ. –

+0

Цените это! Мне просто сложно преобразовать образец Python в Swift – GarySabo