API IBM Watson Tone Analyzer со Swift

Я работаю с API IBM Watson Tone Analyzer, используя Swift. Я попробовал следующий код:

override func viewDidLoad()
    {
        print("hello")
        super.viewDidLoad()
        let username = "USERNAME"
        let password = "PASSWORD"
        let versionDate = "2016-05-19" // use today's date for the most recent version
        let service = ToneAnalyzer(username: username, password: password, version: versionDate)

        let failure = { (error: NSError) in print(error) }
        service.getTone("Text that you want to get the tone of", failure: failure) { responseTone in
            print(responseTone.documentTone)
        }

    }

Для этого я получаю следующую ошибку: Error Domain=com.alamofire.error Code=-6004 «Данные не могут быть сериализованы. Не удалось проанализировать ответ JSON. Во время сериализации не было предоставлено никакой информации об ошибке». UserInfo={NSLocalizedFailureReason=Не удалось сериализовать данные. Не удалось проанализировать ответ JSON. Во время сериализации не было предоставлено никакой информации об ошибке.}

Я читал документацию, но это не помогает решить эту проблему.


person user2609410    schedule 31.05.2016    source источник


Ответы (1)


Вы, кажется, используете какую-то библиотеку? Если это так, наиболее вероятной причиной является изменение номера версии, и вам необходимо установить его. Подробнее об этом здесь< /а>.

Вот пример кода, который я сделал, и он работает (простите меня, мои знания Swift довольно базовые).

//: Playground - noun: a place where people can play

import UIKit
var username = "<SERVICE USERNAME HERE>"
var password = "<SERVICE PASSWORD HERE>"
var endpoint = "https://gateway.watsonplatform.net/tone-analyzer/api/v3/tone?version=2016-05-19&text="

var sampleText = "I am really excited to be working with Watson!"

// -------------------------------------------------------------------

var authString = username + ":" + password
var authData = authString.dataUsingEncoding(NSASCIIStringEncoding)
var authValue = "Basic " + authData!.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))

var toneUrl = endpoint + sampleText.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())!
let url = NSURL(string: toneUrl)

let config = NSURLSessionConfiguration.defaultSessionConfiguration()
config.HTTPAdditionalHeaders = ["Authorization" : authValue]
let session = NSURLSession(configuration: config)

var taskIsRunning = true;
let task = session.dataTaskWithURL(url!) {
    (let data, let response, let error) in
    if let httpResponse = response as? NSHTTPURLResponse {
        do {
            let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)

            // Work with JSON object.
        }
        catch {
            print("Problem serialising JSON object")
        }
    }
    taskIsRunning = false
}

task.resume()
while (taskIsRunning) {
    sleep(1)
}
person Simon O'Doherty    schedule 01.06.2016
comment
Потрясающий! Дайте мне знать, как вы это сделали (документация/видео)? Точно так же я пытаюсь использовать Personality Insights и другие API. - person user2609410; 01.06.2016
comment
Я работаю в группе Ватсон. Вы обнаружите, что приведенный выше код должен работать для любой другой службы (вызовы GET) с небольшой модификацией. Документы по API соответствующих служб, как правило, содержат примеры, которые вы можете использовать. - person Simon O'Doherty; 02.06.2016