IGDB-SWIFT-API 0.4.4

IGDB-SWIFT-API 0.4.4

Filip 维护。



 
依赖项
SwiftProtobuf~> 1.25.1
仅仅~> 0.8.0
 

  • 作者:
  • Filip Husnjak

CocoaPods

IGDB SWIFT-API

IGDB.com免费视频游戏数据库API的Swift包装器。

重要

此包装器仅与最新的V4版本兼容。

关于 IGDB

IGDB.com背后的一个原则是数据的可访问性。我们希望与任何想要构建面向视频游戏的网站、应用程序和服务的人共享数据。这意味着你贡献给IGDB.com的信息也可以由其他项目使用。

因此,你不仅在为这个网站增值,还为成千上万的其他项目增值。我们期待看到你提出的令人兴奋的游戏相关项目。祝你编码愉快!

更多信息请在此处查看

关于查询语言 APICalypse 的信息

关于包装器

此包装器是用 Swift 4 编写和测试的。

包装器可以处理由 IGDB 生成的类和 JSON(字符串),我选择使生成的类成为标准方式,因为这会使使用起来更加容易,您不需要创建自己的类来存储信息。

安装和设置

Swift 包

您可以通过将此存储库链接粘贴到 Xcode 中来导入此库。
Xcode -> Swift 包 -> 添加包依赖项
或者如果您有一个 Package.swift 文件,您可以在其中添加

dependencies: [
.package(url: "https://github.com/husnjak/IGDB-SWIFT-API.git", from: "0.4.2"),
],
targets: [
    .target(name: "MyTarget", dependencies: ["IGDB-SWIFT-API"]),
]

CocoaPods

CocoaPods 是 Cocoa 项目的依赖关系管理器。您可以使用以下命令安装它

$ gem install cocoapods

要使用 CocoaPods 将 IGDBWrapper 集成到您的 Xcode 项目中,在您的 Podfile 中指定它

$ pod 'IGDB-SWIFT-API', git: "https://github.com/husnjak/IGDB-API-SWIFT.git"

然后,运行以下命令

$ pod install

使用您的 Twitch 开发者凭据

  • 通过传递创建一个新的 IGDBWrapper 对象,然后传递您的 API 密钥。
let wrapper: IGDBWrapper = IGDBWrapper(clientID: "CLIENT_ID", accessToken: "ACCESS_TOKEN")

在iOS上的认证

不建议在用户设备上创建新的访问令牌,因为您不希望每个设备都创建多个`access_tokens`。建议在服务器上创建令牌,然后使用代理API调用IGDB API,其中每个请求都附加Bearer令牌。

IGDB提供了一份免费的AWS CloudFormation模板,可以部署用于此目的,并且包含了如何使用它的说明。

  • 创建一个新的IGDBWrapper对象,连接到AWS代理服务器。
let wrapper: IGDBWrapper = IGDBWrapper(proxyURL: "PROXY_URL/v4", proxyHeaders: ["x-api-key": "PROXY_API_KEY"])

如何使用包装器

包装器有两个“包装”函数和许多辅助函数(每个端点一个)。
两个主要函数名为apiRequestapiJsonRequest,它们处理所有对API的请求。
APICalypse处理新的查询语言,因此你无需过多关注结构和语法。

  • apiProtoRequest
    此方法处理IGDB生成的proto类,并返回用于填充适当类的数据。

    wrapper.apiProtoRequest(endpoint: .GAMES, apicalypseQuery: "fields *;", dataResponse: { bytes in
              let games: [Proto_Game] = try! Proto_GameResult(serializedData: bytes) // This converts Binary to a struct
          }, errorResponse: { error in
              // Do Something
          })

    返回一系列游戏对象的列表。

  • apiJsonRequest
    此方法从API返回原始JSON(字符串)。

    wrapper.apiJsonRequest(endpoint: .GAMES, apicalypseQuery: "fields *;", dataResponse: { json in
                print(json)
            }, errorResponse: { error in
                // Do Something
            })

    返回一个字符串。

  • APICalypse

    let apicalypse = APICalypse()
              .fields(fields: "*")
              .exclude(fields: "*")
              .limit(value: 10)
              .offset(value: 0)
              .search(searchQuery: "Halo")
              .sort(field: "release_dates.date", order: .ASCENDING)
              .where(query: "platforms = 48")

    以下列出了所有选项,这为您创建了一个查询。要从APICalypse获取字符串查询,只需添加.buildQuery()

注意
上述示例仅用于展示如何使用包装器的“手动”部分。此包装器提供了API中每个端点的完整函数,因此您无需处理手动部分...

对于每个端点,有两个函数,一个用于类,一个用于JSON,以便快速访问。两者之间的区别在于名称,请看下面的示例

wrapper.games(apiCalypse: APICalypse(), result: ([Proto_Game]) -> (Void), errorResponse: (RequestException) -> (Void))
wrapper.platforms(apiCalypse: APICalypse(), result: ([Proto_Platforms]) -> (Void), errorResponse: (RequestException) -> (Void))
wrapper.genres(apiCalypse: APICalypse(), result: ([Proto_Genres]) -> (Void), errorResponse: (RequestException) -> (Void))
...
wrapper.jsonGames(apiCalypse: APICalypse(), result: (String) -> (Void), errorResponse: (RequestException) -> (Void))
wrapper.jsonPlatforms(apiCalypse: APICalypse(), result: (String) -> (Void), errorResponse: (RequestException) -> (Void))
wrapper.jsonGenres(apiCalypse: APICalypse(), result: (String) -> (Void), errorResponse: (RequestException) -> (Void))
...

ImageBuilder

为了简化构建IGDB图像的URL的过程,新增了一个名为imageBuilder的函数,它可以作为请求项目所需完美尺寸图像的辅助工具。此功能需要您获取image_id,然后设置您所需的大小(分辨率),设置您所需的图像格式(默认设置为PNG)。

let image_id = "mnljdjtrh44x4snmierh"
let imageURL = imageBuilder(imageID: image_id, size: .SCREENSHOT_HUGE, imageType: .PNG)

/*
* Result: 
* imageURL = https://images.igdb.com/igdb/image/upload/t_screenshot_huge/mnljdjtrh44x4snmierh.png
*/

有关图像的更多信息,请参阅此处

异常

包装器在API的每个异常上都会返回一个RequestException。此异常包含以下三个信息

  • HTTP状态码
  • URL
  • MSG,API的消息

代码示例

  • 从API请求游戏
let wrapper = IGDBWrapper(clientID: "CLIENT_ID", accessToken: "ACCESS_TOKEN")

let apicalypse = APICalypse()
    .fields(fields: "*")
    .sort(field: "release_dates.date", order: .DESCENDING)

wrapper.games(apiCalypse: apicalypse, result: { games in
    // Do something..
}) { error in
    // Do something..
}
  • API中搜索:请注意
    搜索对象包含搜索中的对象,例如:角色、收藏集、游戏、平台和主题。
    搜索不与排序一起工作!
let wrapper = IGDBWrapper(clientID: "CLIENT_ID", accessToken: "ACCESS_TOKEN")

let apicalypse = APICalypse()
    .search(searchQuery: "Halo")
    .fields(fields: "*")
    .sort(field: "release_dates.date", order: .ASCENDING)

wrapper.search(apiCalypse: apicalypse, result: { searchResults in
    // Do something..
}) { error in
    // Do something..
}
  • 请求过滤后的结果
let wrapper = IGDBWrapper(clientID: "CLIENT_ID", accessToken: "ACCESS_TOKEN")

let apicalypse = APICalypse()
    .fields(fields: "*")
    .sort(field: "release_dates.date", order: .DESCENDING)
    .where(query: "themes != 42")

wrapper.games(apiCalypse: apicalypse, result: { games in
    // Do something..
}) { error in
    // Do something..
}

许可协议

IGDB-SWIFT-API在MIT许可下可用。有关更多信息,请参阅LICENSE文件。