您可以通过初始化 OpenGraph
来使用 SwiftyOpenGraph,OpenGraph
是 SwiftyOpenGraph 的根对象。 OpenGraph
有两种初始化方法
let graph = OpenGraph(html: htmlString)
let graph = try await OpenGraph(url: "https://quintschaf.com/#/app/mykeyboard")
这两种初始化方法都是可选的,只有当 HTML 至少包含所需的 OpenGraph 属性时才会返回。
每个启用了 Open Graph 的有效网页都具有四个属性,OpenGraph
对象将其公开为非可选常量:title
、type
、image
和 url
。它还可以包含 additionalImages
、audios
、videos
、description
、determiner
、locale
、alternateLocales
和 siteName
。 这些要么是 OpenGraph
对象的可选常量,要么它们包含 OpenGraph 协议定义的默认值。
图像、音频、视频和限定符分别由 OpenGraphImage
、OpenGraphAudio
、OpenGraphVideo
和 Determiner
表示。 它们都是结构体,可能包含额外的数据,例如图像的宽度,由 "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 规范所指定):
song(SongAttributes)
album(AlbumAttributes)
playlist(PlaylistAttributes)
radioStation(RadioStationAttributes)
video(VideoAttributes)
article(ArticleAttributes)
book(BookAttributes)
profile(ProfileAttributes)
website
所有这些(除了默认类型 website
)都有一个结构体作为关联值。 这些结构体保存特定于类型的值。 由于它们在属性上的差异,因此为 song
、album
、playlist
和 radioStation
提供了单独的情况。 由于它们几乎具有相同的属性,因此所有视频类型只有一个 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
}
SwiftyOpenGraph 依赖于 Swift Package Manager,通过将其添加为依赖项来安装。
我们选择使用 CC0 1.0 Universal 许可协议用于 SwiftyOpenGraph。 以下简短说明没有任何法律含义,也不会以任何方式覆盖许可:CC0 1.0 Universal 许可协议授予您在任何(商业或非商业)产品中使用或修改所有 SwiftyOpenGraphs 代码的权利,而无需提及、许可或任何其他类型的麻烦。
当我们尝试在 Swift 中找到 OpenGraph 实现时,只有一个结果。 该结果是使用正则表达式来解析元标记,我们认为这是不可接受的。 因此,我们着手创建一个使用 SwiftSoup
正确解析网页 HTML 的实现。 我们还想确保该项目是 OpenGraph 协议到 Swift 的完美 1:1 抽象。 如果对协议进行了任何添加或更改,我们将尽快采用它们。