algorithmia 0.1.3

algorithmia 0.1.3

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布日期最后发布2017 年 9 月
SwiftSwift 版本3.0
SPM支持 SPM

Anthony Nowell 维护。



algorithmia

Algorithmia API 的 Swift/iOS 客户端库

注意:此客户端是用 Swift 3.0(Xcode 8,iOS 10)编写的

有关 API 文档,请参阅 SwiftDocs

入门

安装

手动

您可以克隆存储库并将文件从 Algorithmia 中拖拽并复制

API密钥

使用您的API密钥实例化客户端

let client = Algorithmia.client(simpleKey: apiKey)

注意

  • 当从 Algorithmia 集群上运行的计算器调用时,可以省略API密钥

调用算法

以下调用算法的示例按输入/输出类型组织,不同算法之间有所不同。

注意:单个算法可能有不同类型的输入和输出,或者接受多种类型的输入,因此请参阅该算法的描述以获取特定于该算法的用法示例。

文本输入/输出

通过将一个字符串传递给它的 pipe 方法来调用具有文本输入的算法。如果算法输出为文本,则调用 getText 方法以将结果作为字符串获取。

let foo = client.algo(algoUri: "algo://demo/Hello/0.1.1")
foo.pipe(text: "foo") { resp, error in
    if (error == nil) {
        let data = resp.getText()
        let metadata = resp.getMetadata()
    } else {
        print(error)
    }
}

JSON输入/输出

通过将可以序列化为JSON的类型(最著名的为 python 字典和数组)传递给算法来调用它。对于返回JSON的算法,调用响应的 getJson 方法以获取适当的反序列化类型。

let foo = client.algo(algoUri: "algo://WebPredict/ListAnagrams/0.1.0")
foo.pipe(json: jsonData) { resp, error in
    if (error == nil) {
        let data = resp.getJSON()
        let metadata = resp.getMetadata()
    } else {
        print(error)
    }
}

如果您已有序列化的JSON,可以这样调用:

let foo = client.algo("")
let jsonWords = "[\"transformer\", \"terraforms\", \"retransform\"]"
foo.pipe(rawJson: jsonWords) { resp, error in

}

二进制输入/输出

通过传递一个 Data 对象到 pipe 方法来调用具有二进制输入的算法。类似地,如果算法的响应是二进制数据,那么 getData 方法的调用结果将成为字节数组的数据对象。

let foo = client.algo(algoUri: "algo://WebPredict/ListAnagrams/0.1.0")
foo.pipe(data: data) { resp, error in
    if (error == nil) {
        let data = resp.getData()
        let metadata = resp.getMetadata()
    } else {
        print(error)
    }
}

错误处理

API 错误和 Algorithm 异常将在回调到 pipe 方法时返回 AlgoError

let foo = client.algo(algoUri: "algo://util/whoopsWrongAlgo")
foo.pipe(text: "foo") { resp, error in
    if let error = error as? AlgoError {
        switch error {
        case .ProcessError:
            print("Algorithmia Error:",error)
            break;
        case .DataError:
            print("Data Error:",error)
            break;
        default:
            break;
        }
    }
}
// Algorithmia Error: algorithm algo://util/whoopsWrongAlgo not found

与数据交互

Algorithmia Java 客户端还提供了管理 Algorithmia 托管数据和您已连接到 Algorithmia 账户的 Dropbox 或 S3 账户数据的途径。

该客户端提供了一种 AlgoDataFile 类型(通常通过 client.file(uri) 创建)以及一种 AlgoDataDirectory 类型(通常通过 client.dir(uri) 创建),它们提供了管理您数据的方法。

创建目录

通过实例化一个 AlgoDataDirectory 对象并调用 create() 来创建目录。

let robots = client.dir("data://.my/robots")
robots.create { error in
...
}

let dbxRobots = client.dir("dropbox://robots")
dbxRobots.create { error in
...
}

将文件上传到目录

通过在 AlgoDataFile 对象上调用 put 或在 AlgoDataDirectory 对象上调用 putFile 来上传文件。

let robots = client.dir("data://.my/robots")

// Upload local file
robots.putFile(file:fileURL) { file, error in
...
}

// Write a text file
robots.file("Optimus_Prime.txt").put(string:"Leader of the Autobots") { error in
...
}

下载文件内容

通过在 DataFile 对象上调用 getStringgetDatagetFile 来下载文件。

let robots = client.dir("data://.my/robots")

// Download file and get the file handle
robots.file("T-800.png").getFile { url, error in
...
}

// Get the file's contents as a string
robots.file("T-800.txt").getString { text, error in
    ...
}
// Get the file's contents as a byte array
robots.file("T-800.dat").getData(completion: { (text, error) in
    ...
})

删除文件和目录

通过分别在 AlgoDataFileAlgoDataDirectory 对象上调用 delete 来删除文件和目录。《AlgoDataDirectory》有一个可选的 force 参数,表示是否应在目录包含文件或其他目录时删除。

client.file("data://.my/robots/C-3PO.txt").delete() { error in
...
}
client.dir("data://.my/robots").delete(force: false) { result, error in
...
}

列出目录内容

使用在 DataDirectory 对象上调用 filesdirs 返回的迭代器遍历目录内容。

// List top level directories
let myRoot = client.dir("data://.my")
myRoot.forEach(file: { file in
        ...
    }, completion: { error in
        ...
})

// List files in the 'robots' directory
myRoot.forEach(dir: { file in
        ...
    }, completion: { error in
        ...
})

管理目录权限

在创建目录时设置目录权限,或在已存在的目录上更新权限。

let fooLimited = client.dir("data://.my/fooLimited")

// Create the directory as private
fooLimited.create(readACL:.PRIVATE) { error in
    ...
}

// Update a directory to be public
fooLimited.update(readACL:.PUBLIC) { error in
    ...
}