GeoLite2를 사용하여 IP 주소에서 국가 및 도시 검색

6928 단어 Java
맥스마인드의 GeoLite2라는 IP 주소에서 국가와 도시 등 위치 정보를 되돌려주는 데이터베이스가 있습니다.
더 높은 정밀도의 GeoIP는 유상이지만 GeoLite2는Creative Commons(디스플레이·상속) 허가증으로 무료로 발급된다.
또 이 데이터베이스를 활용한 GeoIP2 라이브러리도 이 회사의 GiitHub에서 다양한 언어 버전을 배포했다.Java 버전의 라이브러리는 여기에 있습니다.
이 GiitHub 페이지의 설명은 주로 웹 서비스 버전의 클라이언트와 유상 DB의 사용 방법을 설명하지만, 무료 버전의 GeoLite2도 이 프로그램 라이브러리를 사용할 수 있어 문제없이 사용할 수 있다.
GeoLite2를 사용할 때 RDB를 설치하지 않아도 되는 등 메모리에서 데이터를 읽어 활용할 수 있어 간단하다.비록 정밀도는 매우 낮지만, 나는 대충 국명을 붙이기만 하면 충분하다고 생각한다.로그 등을 분석하기 위해 대량의 IP 주소에 국가 정보를 추가하고 싶을 때 편리하다.

사용법


일반적인 Maven 프로젝트의 경우 사용 방법을 설명합니다.

프로젝트에 GeoIP2 라이브러리 추가


pom.xml
<dependency>
    <groupId>com.maxmind.geoip2</groupId>
    <artifactId>geoip2</artifactId>
    <version>2.2.0</version>
</dependency>

GeoLite2 데이터베이스를 다운로드하여 압축 해제 프로젝트에 추가


위 페이지에서 GeoLite 2 City 또는 GeoLite 2 Country Database의 "MaxMind DB binary"버전을 다운로드하여 동결해제하십시오.해동시 크기에 도시정보가 포함된 시티 에디션은 35MB 정도이며, 국가정보만 있는 카운터리 에디션은 10분의 1 정도다.
데이터베이스 파일을 읽는 방법에 관해서, 이번 예는 클래스 마운트를 통해 읽는 것이다src/main/resource 디렉터리 아래에 샘플 패키지와 같은 차원의 디렉터리를 만들고 데이터베이스 파일을 설치합니다.

샘플 코드


qiita.나는 com의 지리 정보를 얻으러 왔다.이 예에서 도시명을 얻을 수 있지만 실제로 도시명을 얻을 수 있다면 행운의 정도를 고려하는 것이 좋다.

public class GeoLiteSample {

    public static void main(String[] args) throws Exception {

        // クラスパスからデータベースファイルを読み込むInputStreamを作成
        InputStream in = GeoLiteSample.class.getResourceAsStream("GeoLite2-City.mmdb");

        // DatabaseReader.Builderクラスを用いてInputStreamからDatabaseReaderオブジェクトを作成
        DatabaseReader cityDB = new DatabaseReader.Builder(in).build();

        // 都市情報を問い合わせ。引数はInetAddressオブジェクトです
        CityResponse res = cityDB.city(InetAddress.getByName("www.qiita.com"));

        // 大陸名を表示 -> Asia
        System.out.println(res.getContinent().getName());

        // 国名を表示 -> Japan
        System.out.println(res.getCountry().getName());

        // 地域名を表示 -> Tōkyō (東京都)
        // 日本の場合LeastSpecificSubdivisionもMostSpecificSubdivisionも県名
        System.out.println(res.getLeastSpecificSubdivision().getName());
        System.out.println(res.getMostSpecificSubdivision().getName());

        // 都市名を表示 -> Tokyo
        System.out.println(res.getCity().getName());

        // 各地域情報からは国コードや言語別の表示名を取得出来ます
        // 国コード -> JP
        System.out.println(res.getCountry().getIsoCode());
        // 日本語での地域名 -> 東京都
        System.out.println(res.getLeastSpecificSubdivision().getNames().get("ja"));
        // 緯度・経度・タイムゾーン -> [latitude=35.685, longitude=139.7514, timeZone=Asia/Tokyo]
        System.out.println(res.getLocation());
   }
}

좋은 웹페이지 즐겨찾기