Получение географической информации на основе IP-адреса с помощью GeoIP2 Java API
1. Что такое GeoIP2?
GeoIP2 это открытый исходный код библиотеки Java. Бесплатно предоставляет GeoLite2 база данных геолокаций соответствующей с IP адресом, и API работающие с этими базами данных и API для работы с веб сервисом (Web service) предоставляющий данные геолокации.
GeoLite2 бесплатная база данных локаций, база данных обновляется постоянно первый вторник каждого месяца.
GeoLite2 бесплатная база данных локаций, база данных обновляется постоянно первый вторник каждого месяца.
GeoIP2 поддерживает разные языки программирования, такие как: C#, C, Java, Perl, PHP, Python,...
Есть 2 способа работы с GeoIP2 API:
- Скачать GeoLite2 имеющие данные локаций и использовать как локальную базу данных. GeoIP2 API извлекает географическую информацию по IP адресу из данной базы данных.
- Использовать GeoIP2 API для подключения к веб сервису, который предоставляет информацию локации через IP адрес, этот способ требует лицензионный ключ License_Key (вы должны заплатить).
2. Download GeoIP2
Если вы используете Maven:
<!-- http://mvnrepository.com/artifact/com.maxmind.geoip2/geoip2 -->
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.15.0</version>
</dependency>
Или скачайте библиотеку.
3. Download GeoLite2
To download GeoLite2 database you need to register for an account, which is completely free.
Then log in with your account:
Скачанный результат:
Извлечь 2 файла:
4. Быстро создать 1 Project для работы с GeoIP2
Создайте новый Maven Project.
- File/New/Other...
Ввод:
- Group Id: org.o7planning
- Artifact Id: geoip2tutorial
- Package: org.o7planning.geoip2tutorial
Объявить maven:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.o7planning</groupId>
<artifactId>geoip2tutorial</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>geoip2tutorial</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<!-- http://mvnrepository.com/artifact/com.maxmind.geoip2/geoip2 -->
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.15.0</version>
</dependency>
</dependencies>
</project>
5. Пример с GeoIP2
Вы уже скачали данные GeoLite2 и вставили в локальную папку. В данном примере используется GeoIP2 Java API для извлечения информации соответсвующий определенному IP адресу.
MyConstants.java
package org.o7planning.geoip2tutorial;
public class MyConstants {
// Country Data.
public static final String DATABASE_COUNTRY_PATH = "F:/GeoLite2/GeoLite2-Country.mmdb";
// City Data.
public static final String DATABASE_CITY_PATH = "F:/GeoLite2/GeoLite2-City.mmdb";
public static final int MY_USER_ID = 42;
public static final String MY_LICENSE_KEY = "license_key";
}
HelloGeoIP2.java
package org.o7planning.geoip2tutorial;
import java.io.File;
import java.io.IOException;
import java.net.InetAddress;
import com.maxmind.geoip2.DatabaseReader;
import com.maxmind.geoip2.exception.GeoIp2Exception;
import com.maxmind.geoip2.model.CityResponse;
import com.maxmind.geoip2.record.City;
import com.maxmind.geoip2.record.Country;
import com.maxmind.geoip2.record.Location;
import com.maxmind.geoip2.record.Postal;
import com.maxmind.geoip2.record.Subdivision;
public class HelloGeoIP2 {
public static void main(String[] args) throws IOException, GeoIp2Exception {
// A File object pointing to your GeoLite2 database
File dbFile = new File(MyConstants.DATABASE_CITY_PATH);
// This creates the DatabaseReader object,
// which should be reused across lookups.
DatabaseReader reader = new DatabaseReader.Builder(dbFile).build();
// A IP Address
InetAddress ipAddress = InetAddress.getByName("128.101.101.101");
// Get City info
CityResponse response = reader.city(ipAddress);
// Country Info
Country country = response.getCountry();
System.out.println("Country IsoCode: "+ country.getIsoCode()); // 'US'
System.out.println("Country Name: "+ country.getName()); // 'United States'
System.out.println(country.getNames().get("zh-CN")); // '美国'
Subdivision subdivision = response.getMostSpecificSubdivision();
System.out.println("Subdivision Name: " +subdivision.getName()); // 'Minnesota'
System.out.println("Subdivision IsoCode: "+subdivision.getIsoCode()); // 'MN'
// City Info.
City city = response.getCity();
System.out.println("City Name: "+ city.getName()); // 'Minneapolis'
// Postal info
Postal postal = response.getPostal();
System.out.println(postal.getCode()); // '55455'
// Geo Location info.
Location location = response.getLocation();
// Latitude
System.out.println("Latitude: "+ location.getLatitude()); // 44.9733
// Longitude
System.out.println("Longitude: "+ location.getLongitude()); // -93.2323
}
}
Запуск примера:
6. Пример с GeoIP2 Web Service
Вместо того, чтобы подключиться к локальной базе данных для извлечения географической информации соответсвующей IP адресу, вы можете использовать веб сервис (Web service) предоставляющий эти данные. Вам нужно купить лицензионный ключ LICENSE_KEY. Пример ниже указывает как получить географическую информацию соответствующую IP адресу через веб сервис.
HelloGeoIP2Service.java
package org.o7planning.geoip2tutorial;
import java.io.IOException;
import java.net.InetAddress;
import com.maxmind.geoip2.WebServiceClient;
import com.maxmind.geoip2.exception.GeoIp2Exception;
import com.maxmind.geoip2.model.CountryResponse;
import com.maxmind.geoip2.record.Country;
public class HelloGeoIP2Service {
public static void main(String[] args) throws IOException, GeoIp2Exception {
WebServiceClient.Builder builder
= new WebServiceClient.Builder(MyConstants.MY_USER_ID, MyConstants.MY_LICENSE_KEY);
WebServiceClient client = builder.build();
// IP Address
InetAddress ipAddress = InetAddress.getByName("128.101.101.101");
// Do the lookup
CountryResponse response = client.country(ipAddress);
// Country Info .
Country country = response.getCountry();
System.out.println("Country Iso Code: "+ country.getIsoCode()); // 'US'
System.out.println("Country Name: "+ country.getName()); // 'United States'
System.out.println(country.getNames().get("zh-CN")); // '美国'
}
}
Java Open source libraries
- Руководство Java JSON Processing API (JSONP)
- Использование Scribe OAuth Java API с Google OAuth 2
- Получить информацию об оборудовании в приложении Java
- Restfb Java API для Facebook
- Создание Credentials для Google Drive API
- Руководство Java JDOM2
- Руководство Java XStream
- Использование Java JSoup для анализа кода HTML
- Получение географической информации на основе IP-адреса с помощью GeoIP2 Java API
- Чтение и запись файла Excel в Java с использованием Apache POI
- Изучите Facebook Graph API
- Манипулирование файлами и папками в Google Drive с использованием Java
Show More