Search code examples
javaguavadomain-nametld

implementing Public Suffix extraction using java


i need to extract the top domain of an url and i got his http://publicsuffix.org/index.html

and the java implementation is in http://guava-libraries.googlecode.com and i could not find any example to extract domain name

say example..
example.google.com
returns google.com

and bing.bing.bing.com
returns bing.com

can any one tell me how can i implement using this library with an example....


Solution

  • It looks to me like InternetDomainName.topPrivateDomain() does exactly what you want. Guava maintains a list of public suffixes (based on Mozilla's list at publicsuffix.org) that it uses to determine what the public suffix part of the host is... the top private domain is the public suffix plus its first child.

    Here's a quick example:

    public class Test {
      public static void main(String[] args) throws URISyntaxException {
        ImmutableList<String> urls = ImmutableList.of(
            "http://example.google.com", "http://google.com", 
            "http://bing.bing.bing.com", "http://www.amazon.co.jp/");
        for (String url : urls) {
          System.out.println(url + " -> " + getTopPrivateDomain(url));
        }
      }
    
      private static String getTopPrivateDomain(String url) throws URISyntaxException {
        String host = new URI(url).getHost();
        InternetDomainName domainName = InternetDomainName.from(host);
        return domainName.topPrivateDomain().name();
      }
    }
    

    Running this code prints:

    http://example.google.com -> google.com
    http://google.com -> google.com
    http://bing.bing.bing.com -> bing.com
    http://www.amazon.co.jp/ -> amazon.co.jp