TLDExtract
TLDExtract
是一个纯 Swift 库,允许你使用 公用后缀列表 获取域名名的公共后缀。你可以在 publicsuffix.org 找到其他语言的替代方案。
什么是域名?
域名名是网站独特的、易于阅读的互联网地址。它由三部分组成:顶级域名(即TLD),二级域名,以及可选的子域名。
功能
- 从url和hostname中提取根域名,顶级域名,二级域名,子域名
- 支持Foundation URL和String
- IDNA支持
- 多平台支持
要求
- iOS 9.3 或更高版本
- macOS 10.12 或更高版本
- tvOS 12.0 或更高版本
- Swift 4.2
- Python 2.7 或 Python 3
目前无计划支持tvOS 11 或更早版本
安装
Carthage
将以下内容添加到您的Cartfile
中,并按照这些说明操作。
github "gumob/TLDExtractSwift"
CocoaPods
要将TLDExtract集成到您的项目中,请将以下内容添加到您的Podfile
中。
platform :ios, '9.3'
use_frameworks!
pod 'TLDExtract'
使用方法
初始化
基本的初始化代码。除非服务器上的公共后缀列表损坏,否则不会抛出异常。
import TLDExtract
let extractor = try! TLDExtract()
一种更安全的初始化代码,通过使用冻结的公共后缀列表来避免错误。
import TLDExtract
let extractor = try! TLDExtract(useFrozenData: true)
*公共后缀列表在框架构建时更新。通过将userFrozenData设置为true,TLDExtract加载从仓库检出数据。
提取
将参数作为字符串传递
提取URL
let urlString: String = "https://www.github.com/gumob/TLDExtract"
guard let result: TLDResult = extractor.parse(urlString) else { return }
print(result.rootDomain) // Optional("github.com")
print(result.topLevelDomain) // Optional("com")
print(result.secondLevelDomain) // Optional("github")
print(result.subDomain) // Optional("www")
提取主机名
let hostname: String = "gumob.com"
guard let result: TLDResult = extractor.parse(hostname) else { return }
print(result.rootDomain) // Optional("gumob.com")
print(result.topLevelDomain) // Optional("com")
print(result.secondLevelDomain) // Optional("gumob")
print(result.subDomain) // nil
提取Unicode主机名
let hostname: String = "www.ラーメン.寿司.co.jp"
guard let result: TLDResult = extractor.parse(hostname) else { return }
print(result.rootDomain) // Optional("寿司.co.jp")
print(result.topLevelDomain) // Optional("co.jp")
print(result.secondLevelDomain) // Optional("寿司")
print(result.subDomain) // Optional("www.ラーメン")
提取Punycoded主机名(与上方相同)
let hostname: String = "www.xn--4dkp5a8a.xn--sprr0q.co.jp")"
guard let result: TLDResult = extractor.parse(hostname) else { return }
print(result.rootDomain) // Optional("xn--sprr0q.co.jp")
print(result.topLevelDomain) // Optional("co.jp")
print(result.secondLevelDomain) // Optional("xn--sprr0q")
print(result.subDomain) // Optional("www.xn--4dkp5a8a")
将参数作为基础URL传递
提取Unicode URL
默认情况下,Foundation框架中的URL类不支持Unicode URL。您可以使用URL扩展作为解决方案
let urlString: String = "http://www.ラーメン.寿司.co.jp"
let url: URL = URL(unicodeString: urlString)
guard let result: TLDResult = extractor.parse(url) else { return }
print(result.rootDomain) // Optional("www.ラーメン.寿司.co.jp")
print(result.topLevelDomain) // Optional("co.jp")
print(result.secondLevelDomain) // Optional("寿司")
print(result.subDomain) // Optional("www.ラーメン")
通过将参数作为百分编码字符串传递来编码URL(与上方相同)
let urlString: String = "http://www.ラーメン.寿司.co.jp".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
let url: URL = URL(string: urlString)
print(urlString) // http://www.%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%B3.%E5%AF%BF%E5%8F%B8.co.jp
guard let result: TLDResult = extractor.parse(url) else { return }
print(result.rootDomain) // Optional("www.ラーメン.寿司.co.jp")
print(result.topLevelDomain) // Optional("co.jp")
print(result.secondLevelDomain) // Optional("寿司")
print(result.subDomain) // Optional("www.ラーメン")
使用Punycode
框架编码Unicode URL
import Punycode
let urlString: String = "http://www.ラーメン.寿司.co.jp".idnaEncoded!
let url: URL = URL(string: urlString)
print(urlString) // http://www.xn--4dkp5a8a.xn--sprr0q.co.jp
guard let result: TLDResult = extractor.parse(url) else { return }
print(result.rootDomain) // Optional("xn--sprr0q.co.jp")
print(result.topLevelDomain) // Optional("co.jp")
print(result.secondLevelDomain) // Optional("xn--sprr0q")
print(result.subDomain) // Optional("www.xn--4dkp5a8a")
版权
TLDExtract以MIT许可证发布,这意味着您可以修改它、重新分发它或以任何您喜欢的方式使用它。