tldjsでできます
振り返るとこんな感じで悩んでいました。
今回実現したいこと
URLからdomainをぬきだすには
トップレベルドメインとかルートドメインとか調べました。
zoneで取れないかとdnsやurlも試して色々無理ななか、
やりたいことはこれでした
https://aaaaa.google.co.jp/1234/455/ をこうしたい → google.co.jp
http://bbbb.google.com/?q=domain をこうしたい → google.com
https://ccccc.saitama.co.jp? をこうしたい → saitama.co.jp
https://www.meti.go.jp/ をこうしたい → meti.go.jp
すぐ思いつく可能性でlocationからとることはできないことも、次のスクショから明白でした。
ならこうしようとしました
トップレベルドメインを列挙して、それが出てくる場所を探して、そこからみつからる最初の ピリオド「.」を探して・・・
でもむりっしょ?
だからtldjsを使おうって話
tldjsをつかうと、このように分解してくれます。
tldjsはurlからdomainを取り出し
おそらく先に挙げたアタックのようなこともやってる。
試しに600サイト確認したけどエラーも起きなかった。
使い方はとっても簡単
このようなjsをかいておくと、
const tldjs = require('tldjs');
tldjs.parse('https://www.enecho.meti.go.jp/about/special/johoteikyo/interview14ushikubo02.html');
実行結果がこうなります
{ hostname: 'www.enecho.meti.go.jp',
isValid: true,
isIp: false,
tldExists: true,
publicSuffix: 'go.jp',
domain: 'meti.go.jp',
subdomain: 'www.enecho' }
一連のコードにするとこんん感じ
const tldjs = require('tldjs');
const result = tldjs.parse('https://www.enecho.meti.go.jp/about/special.html');
console.log(result.domain);
結果はもくてきどおりとなりました
=> meti.go.jp
今では、これを使って大量のサイトからトップレベルドメインにあるはずの、特定情報取り込んでいます。
他にparse-domainでもできるよ
自前でも作ることができるよ
いろんなやりかたあるけど、ltdjsは便利でした