URL からドメインを抽出する

Day7 からインスパイヤされて URL からドメインらしきものを抽出するスクリプトを書いてみます。 ただし、最初に断っておかなければならないのは、こうした方法はあくまで「ドメインっぽい文字列」の抽出であって、ドメインを正しく抽出できているとは限りませんし、そのドメインが存在するかどうかも分からないということです。

プログラムとしては以下のようになります。

#! /usr/loca/bin/nawk -f
# url2domain.awk
# URL からドメインを抽出します。
# usage: nawk -f url2domain.awk file[s]

{
    print url2domain($0);
}

# url2domain():     URL からドメインを抽出する
#   in:     URL (url)
#   out:    ドメイン (domain)
function url2domain(url,
                    num_url, arr_url,
                    sub_domain, num_sub_domain, arr_sub_domain, domain) {
    num_url = split(url, arr_url, /\//);

    # "//" があれば、その後をサブドメインとし、
    # それ以外は最初がサブドメインとする
    if (arr_url[2] == "") {
        sub_domain = arr_url[3];
    } else {
        sub_domain = arr_url[1];
    }

    num_sub_domain = split(sub_domain, arr_sub_domain, /\./);

    # "co.jp" のようなドメインを考える
    if (length(arr_sub_domain[num_sub_domain - 1]) <= 2) {
        domain = arr_sub_domain[num_sub_domain - 2] "."\
                 arr_sub_domain[num_sub_domain - 1] "."\
                 arr_sub_domain[num_sub_domain];
    } else {
        domain = arr_sub_domain[num_sub_domain - 1] "."\
                 arr_sub_domain[num_sub_domain];
    }

    return domain;
}

まず、以下のようなサンプルを用意しました。

$ cat sample.txt
http://YYYYYYYYYY.blog64.fc2.com/blog-entry-1.html
http://ameblo.jp/XXXXXXXXXX/entry-12121212121.html
http://YYYYYYYYYY.blog64.fc2.com/blog-entry-2.html
http://d.hatena.ne.jp/kermitonphd/20091001#1254409178
http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_229

ここからドメインを抽出してみます。

$ nawk -f url2domain.awk sample.txt
fc2.com
ameblo.jp
fc2.com
hatena.ne.jp
no-ip.org

それが実在のドメインなのかどうかを調べてからお使いください。

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png