tldextract-rs

Crates.iotldextract-rs
lib.rstldextract-rs
version0.1.1
sourcesrc
created_at2023-12-14 11:51:11.512279
updated_at2023-12-19 13:16:35.434081
descriptionextract domain info from a url
homepagehttps://github.com/emo-crab/tldextract-rs
repositoryhttps://github.com/emo-crab/tldextract-rs
max_upload_size
id1069362
size257,813
三米前有蕉皮 (cn-kali-team)

documentation

https://docs.rs/tldextract-rs

README

Summary

tldextract-rs is a high performance effective top level domains (eTLD) extraction module that extracts subcomponents from Domain.

Hostname

  • Cargo.toml:
tldextract-rs = { git = "https://github.com/emo-cat/tldextract-rs" }
  • example code
use tldextract_rs::TLDExtract;

fn main() {
    let source = tldextract_rs::Source::Hardcode;
    let suffix = tldextract_rs::SuffixList::new(source, false, None);
    let mut extract = TLDExtract::new(suffix, true).unwrap();
    let e = extract.extract("  mirrors.tuna.tsinghua.edu.cn").unwrap();
    let s = serde_json::to_string_pretty(&e).unwrap();
    println!("{:}", s);
}
  • ExtractResult
{
  "subdomain": "mirrors.tuna",
  "domain": "tsinghua",
  "suffix": "edu.cn",
  "registered_domain": "tsinghua.edu.cn"
}

Implementation details

Why not split on "." and take the last element instead?

Splitting on "." and taking the last element only works for simple eTLDs like com, but not more complex ones like oseto.nagasaki.jp.

eTLD tries

tldextract-rs stores eTLDs in compressed tries.

Valid eTLDs from the Mozilla Public Suffix List are appended to the compressed trie in reverse-order.

Given the following eTLDs
au
nsw.edu.au
com.ac
edu.ac
gov.ac

and the example URL host `example.nsw.edu.au`

The compressed trie will be structured as follows:

START
 ╠═ au 🚩 ✅
 ║  ╚═ edu ✅
 ║     ╚═ nsw 🚩 ✅
 ╚═ ac
    ╠═ com 🚩
    ╠═ edu 🚩
    ╚═ gov 🚩

=== Symbol meanings ===
🚩 : path to this node is a valid eTLD
✅ : path to this node found in example URL host `example.nsw.edu.au`

The URL host subcomponents are parsed from right-to-left until no more matching nodes can be found. In this example, the path of matching nodes are au -> edu -> nsw. Reversing the nodes gives the extracted eTLD nsw.edu.au.

Acknowledgements

Commit count: 9

cargo fmt