FaviconFinder
FaviconFinder是一个小巧的纯Swift库,专为iOS和macOS应用程序设计,允许您检测网站使用的favicon。
为什么不止下载位于https://site.com/favicon.ico
的文件?开发者可以在很多地方放置favicon,而不仅是在根目录下具有特定文件名favicon.ico
的目录。favicon的地址可能链接在HTML标题标签内,或者可能位于一个web应用程序manifest JSON文件中,甚至可能是自定义文件名的文件。
FaviconFinder为您处理了这些繁琐的工作,它会遍历众多可能的favicon位置,一旦找到图像,就通过闭包向您提供。
FaviconFinder将
- 检测根目录中URL提供的favicon。
- 在子域失败时,自动检查favicon是否位于根URL内(如果子域失败,则检查
https://site.com/favicon.ico
)。 - 检测并解析URL处的HTML以声明favicon。
- 为您解析favicon URL,即使它是查询的子域的相对URL。
- 允许您优先服务器端favicon的格式。
- 检测并解析web应用程序manifest JSON文件中的favicon位置。
- 如果您将
checkForMetaRefreshRedirect
设置为true,FaviconFinder将分析HTML以查找meta refresh重定向标签。如果找到了这样的标签,标签中的URL将被查询。
待完成
- 检测并解析web应用程序Microsoft浏览器配置XML。
用法
FaviconFinder使用简单的语法,允许您轻松下载所需的favicon,并继续您的项目。只需将此代码插入到项目中即可
do {
let favicon = try await FaviconFinder(url: url).downloadFavicon()
print("URL of Favicon: \(favicon.url)")
DispatchQueue.main.async {
self.imageView.image = favicon.image
}
} catch let error {
print("Error: \(error)")
}
高级使用
然而,如果您想对所需的favicon进行细粒度控制,您也可以做到。
FaviconFinder允许您指定首选的下载类型(HTML、实际文件或Web应用程序清单文件),然后允许您为每种下载类型指定您首选的favicon类型。
例如,您可以指定您首选HTML标签favicon,类型为appleTouchIcon
。FaviconFinder将随后搜索HTMLfavicon标签中的appleTouchIcon
类型。如果找不到此类型,则将搜索其他HTMLfavicon标签类型。
如果URL没有指定favicon的HTML标签,FaviconFinder会默认尝试其他下载类型,并搜索URL中的每个favicon下载类型,直到找到为止,或者将返回错误。
就像您可以指定首选的HTMLfavicon标签一样,您也可以在搜索实际文件时设置首选的文件名。
类似地,您还可以指定在遍历Web应用程序清单文件时偏好的JSON键。
对于.ico
下载类型,您可以要求FaviconFinder搜索您选择的文件名。
此外,您还可以让FaviconFinder知道您需要解析和analysis网站HTML以查找meta刷新重定向标签,并查询找到的新URL。
这是您如何发出请求的方法
do {
let favicon = try await FaviconFinder(
url: url,
preferredType: .html,
preferences: [
.html: FaviconType.appleTouchIcon.rawValue,
.ico: "favicon.ico",
.webApplicationManifestFile: FaviconType.launcherIcon4x.rawValue
]
).downloadFavicon()
print("URL of Favicon: \(favicon.url)")
DispatchQueue.main.async {
self.imageView.image = favicon.image
}
} catch let error {
print("Error: \(error)")
}
这允许您控制
- FaviconFinder首先使用何种下载类型
- 在遍历每种下载类型时,查找哪种子类型。对于HTML下载类型,此功能允许您优先考虑不同的“rel”类型。对于文件.ico类型,此功能允许您选择文件名。
如果您的URL中不存在所需的下载类型(例如,您请求了作为文件存在的favicon,但没有文件),FaviconFinder将自动尝试所有其他favicon存储方法。
示例项目
要运行示例项目,请克隆存储库,并从Example目录运行pod install
。
要求
FaviconFinder 现在支持 await/async 并发,如下例所示。因此,FaviconFinder 的最新版本需要 iOS 15.0 和 macOS 12.0。如果您需要支持较旧版本的 iOS 或 macOS,FaviconFinder 3.3.0 版本使用闭包回调和 await/async 并发。
安装
Cocoapods
FaviconFinder 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:
pod 'FaviconFinder', '4.0.0'
Carthage
FaviconFinder 同时也通过 Carthage 提供。要安装它,只需将该行添加到您的 Cartfile 中:
github "will-lumley/FaviconFinder" == 4.0.0
Swift Package Manager
FaviconFinder 也通过 Swift Package Manager 提供。要安装它,只需在您的 Package.Swift 文件中添加依赖。
...
dependencies: [
.package(url: "https://github.com/will-lumley/FaviconFinder.git", from: "4.0.0"),
],
targets: [
.target( name: "YourTarget", dependencies: ["FaviconFinder"]),
]
...
作者
William Lumley,[email protected]
许可证
FaviconFinder遵从MIT许可证。更多详情请参阅LICENSE文件。