Реализация извлечения государственного суффикса с использованием java

Мне нужно извлечь верхний домен url, и я получил его http://publicsuffix.org/index.html

и реализация java находится в http://guava-libraries.googlecode.com, и я не смог найти любой пример для извлечения имени домена

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

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

может кто-нибудь сказать мне, как я могу реализовать эту библиотеку с примером....

Ответ 1

Мне кажется, что InternetDomainName.topPrivateDomain() делает именно то, что вы хотите. Guava ведет список общедоступных суффиксов (на основе списка Mozilla на publicsuffix.org), который он использует для определения того, что является частью общего суффикса хоста. Верхний частный домен является общедоступным суффиксом плюс его первым дочерним элементом.

Вот пример:

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();
  }
}

Выполнение этого кода печатает:

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

Ответ 2

EDIT: Извините, я был слишком быстрым. Я не думал о co.jp. co.uk и т.д. Вам нужно будет получить список возможных TLD откуда-то. Вы также можете взглянуть на http://commons.apache.org/validator/ для проверки TLD.

Я думаю, что что-то вроде этого должно работать: Но, возможно, существует некоторая Java-стандартная функция.

String url = "http://www.foobar.com/someFolder/index.html";
if (url.contains("://")) {
  url = url.split("://")[1];
}

if (url.contains("/")) {
  url = url.split("/")[0];
}

// You need to get your TLDs from somewhere...
List<String> magicListofTLD = getTLDsFromSomewhere();

int positionOfTLD = -1;
String usedTLD = null;
for (String tld : magicListofTLD) {
  positionOfTLD = url.indexOf(tld);
  if (positionOfTLD > 0) {
    usedTLD = tld;
    break;
  }
}

if (positionOfTLD > 0) {
  url = url.substring(0, positionOfTLD);
} else {
  return;
}
String[] strings = url.split("\\.");

String foo = strings[strings.length - 1] + "." + usedTLD;
System.out.println(foo);

Ответ 3

Недавно я реализовал API публичного списка суффиксов:

PublicSuffixList suffixList = new PublicSuffixListFactory().build();

assertEquals(
    "google.com", suffixList.getRegistrableDomain("example.google.com"));

assertEquals(
    "bing.com", suffixList.getRegistrableDomain("bing.bing.bing.com"));

assertEquals(
    "amazon.co.jp", suffixList.getRegistrableDomain("www.amazon.co.jp"));