SwiftyOpenGraph

GithubCI_Status LICENSE_BADGE Platform

用法

初始化

您可以通过初始化 OpenGraph 来使用 SwiftyOpenGraph,OpenGraph 是 SwiftyOpenGraph 的根对象。 OpenGraph 有两种初始化方法

HTML 字符串

let graph = OpenGraph(html: htmlString)

URL

let graph = try await OpenGraph(url: "https://quintschaf.com/#/app/mykeyboard")

这两种初始化方法都是可选的,只有当 HTML 至少包含所需的 OpenGraph 属性时才会返回。

基本属性

每个启用了 Open Graph 的有效网页都具有四个属性,OpenGraph 对象将其公开为非可选常量:titletypeimageurl。它还可以包含 additionalImagesaudiosvideosdescriptiondeterminerlocalealternateLocalessiteName。 这些要么是 OpenGraph 对象的可选常量,要么它们包含 OpenGraph 协议定义的默认值。

图像、音频、视频和限定符分别由 OpenGraphImageOpenGraphAudioOpenGraphVideoDeterminer 表示。 它们都是结构体,可能包含额外的数据,例如图像的宽度,由 "og:image:width" 元标记表示。

示例

print(graph.title)  // "MyKeyboard"
print(graph.type)   // OpenGraphType.website
print(graph.image)  // OpenGraphImage(url: "...", width: ...)
print(graph.url)    // "https://quintschaf.com/#/app/mykeyboard"

print(graph.additionalImages)   // []
print(graph.audios)             // []
print(graph.videos)             // []
print(graph.description)        // Optional("The fully customizable Keyboard.")
print(graph.determiner)         // Determiner.blank
print(graph.locale)             // "en_US"
print(graph.alternateLocales)   // []
print(graph.siteName)           // nil

类型

类型 ("og:type") 由 OpenGraphType 枚举表示,它具有以下情况(如 OpenGraph 规范所指定):

所有这些(除了默认类型 website)都有一个结构体作为关联值。 这些结构体保存特定于类型的值。 由于它们在属性上的差异,因此为 songalbumplaylistradioStation 提供了单独的情况。 由于它们几乎具有相同的属性,因此所有视频类型只有一个 video 情况。 因此,VideoAttributes 包含一个 kind 属性,该属性是一个包含所有视频类型的枚举。

示例

switch graph.type {
case .video(let attributes):
    print(attributes.kind)          // VideoAttributes.SubKind.movie
    print(attributes.actors)        // []
    print(attributes.directors)     // []
    print(attributes.writers)       // []
    print(attributes.duration)      // Optional(200)
    print(attributes.releaseDate)   // Optional(Date(...))
    print(attributes.tags)          // ["some", "words", "as", "tags"]
    print(attributes.series)        // nil
default:
    break
}

安装

Swift Package Manager

SwiftyOpenGraph 依赖于 Swift Package Manager,通过将其添加为依赖项来安装。

许可协议

我们选择使用 CC0 1.0 Universal 许可协议用于 SwiftyOpenGraph。 以下简短说明没有任何法律含义,也不会以任何方式覆盖许可:CC0 1.0 Universal 许可协议授予您在任何(商业或非商业)产品中使用或修改所有 SwiftyOpenGraphs 代码的权利,而无需提及、许可或任何其他类型的麻烦。

背景

当我们尝试在 Swift 中找到 OpenGraph 实现时,只有一个结果。 该结果是使用正则表达式来解析元标记,我们认为这是不可接受的。 因此,我们着手创建一个使用 SwiftSoup 正确解析网页 HTML 的实现。 我们还想确保该项目是 OpenGraph 协议到 Swift 的完美 1:1 抽象。 如果对协议进行了任何添加或更改,我们将尽快采用它们。