TLDExtract
是一个 Swift 包,允许您提取
从 URL
或主机名 String
中。
这是对 Kojiro Futamura 在 gumob/TLDExtractSwift 上出色工作的分支。
async
函数,用于调用网络请求,从远程服务器临时获取最新的 PSL。如果您想通过 CocoaPods 或 Carthage 使用该库,请继续使用 原始仓库。
import TLDExtract
let extractor = 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.ラーメン")
提取 Punycode 主机名 (与上面相同)
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")
提取 Unicode URL
Foundation Framework 中的 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.ラーメン")
此存储库定期发布包含最新 PSL 的新版本。 假设您 更新到最新版本,这对于大多数应用程序开发人员来说应该足够了。
尽管如此,一个 async
函数允许调用网络请求,从远程服务器临时获取最新的 PSL。
import TLDExtract
let extractor = TLDExtract()
try await extractor.fetchLatestPSL()
需要网络连接!