LoginSignup
0
0

More than 3 years have passed since last update.

tldjsでurlからdomainを取り出す方法

Posted at

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からとることはできないことも、次のスクショから明白でした。
スクリーンショット 2019-07-06 14.46.17.png

ならこうしようとしました

トップレベルドメインを列挙して、それが出てくる場所を探して、そこからみつからる最初の ピリオド「.」を探して・・・

でもむりっしょ?

だから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は便利でした

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0