TLDExtract 1.0.1

TLDExtract 1.0.1

Gumob DeveloperKojiro Futamura 维护。



  • gumob

Carthage compatible Version Platform Build Status codecov Language Packagist

TLDExtract

TLDExtract 是一个纯 Swift 库,允许你使用 公用后缀列表 获取域名名的公共后缀。你可以在 publicsuffix.org 找到其他语言的替代方案。

什么是域名?

域名名是网站独特的、易于阅读的互联网地址。它由三部分组成:顶级域名(即TLD),二级域名,以及可选的子域名。

drawing

功能

  • 从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许可证发布,这意味着您可以修改它、重新分发它或以任何您喜欢的方式使用它。