URLからドメイン名を取得する方法

すべてのドメイン名の一番後ろには、トップレベル・ドメイン(TLD)名があります。TLDは、ジェネリックな名称(comなど)、または国コード(日本の場合はjp)です。

しかし、ドメイン名の中には2要素のTLDを使用しているものがあり、URLからのトップレベル・ドメインの取得を複雑にしています。

次にその例を示します。 この例が示すように、後ろの1要素または2要素のいずれをドメイン名のTLD名として扱うかについては、一般化が困難な場合が多く見られます。後ろの1要素のみをTLDとして扱う方法は、xyz.comには適切に当てはまりますが、xyz.co.ukには当てはまりません(誤ってco.ukをドメイン名として判断してしまいます)。したがって、クローラがURLを解析してドメイン名を取得する場合は、この点を考慮に入れる必要があります。
ドメイン名で使用されているTLDを判別するには、crawlscope.top-level-domainsの2つのプロパティが使用されます。
Web CrawlerはURLからドメイン名を取得する際に、これらのプロパティ値を次のように使用します。
  1. クローラは最初にホスト名の一番後ろの要素を参照します。TLDがcrawlscope.top-level-domains.genericのリストに含まれている場合(comなど)、クローラは後ろの2要素(xyzcom)をドメイン名と判断します。したがって、http://www.xyz.comというサンプルURLのドメイン名はxyz.comであると判断されます。
  2. 一番後ろの1要素がジェネリックTLDでない場合、クローラは次のように動作します。ホスト名全体をcrawlscope.top-level-domains.additionalのリストと比較します。一致するものがない場合は、ホスト名の先頭の要素を取り除いて再度リストと比較します。それでも一致するものがない場合は同じ処理を繰り返し、一致するものが見つかるか、またはホスト名から取り除く要素がなくなるまでこれを繰り返します。
  3. additionalのリストに一致する要素がない場合は、後ろの2要素をドメイン名として返し、ログにエラー・メッセージを記録します。
たとえば、http://www.xyz.co.ukをクロール対象にしており、したがってxyz.co.ukをドメイン名と判断する場合を考えます。最初に、crawlscope.top-level-domains.additionalのリストにco.ukを追加します。ドメイン名が返される手順は次のとおりです。
  1. ukという要素についてジェネリックTLDのリストをチェックしますが、見つかりません。
  2. crawlscope.top-level-domains.additionalのリストにwww.xyz.co.ukがあるかチェックしますが、一致するものは見つかりません。
  3. 追加TLDのリストにxyz.co.ukがあるかチェックしますが、一致するものは見つかりません。
  4. 追加TLDのリストにco.ukがあるかチェックし、ここで一致するものが見つかります。xyz.co.ukというドメイン名が返されます。
もし、手順4を実行してもadditionalリストに一致するものが見つからなかった場合は、チェックされた後ろの2要素がドメイン名として返されます(この例ではco.uk)。また、次の例のようなデバッグレベルのメッセージがログに記録されます。
Failed to get the domain name for url: url
using result as the default domain name
ここで、urlはドメイン名の抽出対象となったオリジナルのURLであり、resultは最後にチェック対象となった2つの要素からなるドメイン名です(co.ukなど)。このメッセージが記録された場合は、additionalリストにその2つの要素を追加し、クロールを再試行してください。