Lấy thông tin địa lý dựa trên địa chỉ IP sử dụng GeoIP2 Java API
1. GeoIP2 là gì?
GeoIP2 là một thư viện mã nguồn mở Java. Nó cung cấp miễn phí GeoLite2 một cơ sở dữ liệu định vị ứng với các địa chỉ IP, và các API làm việc với cơ sở dữ liệu này và API để làm việc với dịch vụ web (Web service) cung cấp dữ liệu định vị.
GeoLite2 là một cơ sở dữ liệu định vị miễn phí, dữ liệu của nó được cập nhập thường xuyên vào ngày thứ 3 (Tuesday) đầu tiên hàng tháng.
GeoLite2 là một cơ sở dữ liệu định vị miễn phí, dữ liệu của nó được cập nhập thường xuyên vào ngày thứ 3 (Tuesday) đầu tiên hàng tháng.
GeoIP2 hỗ trợ cho nhiều ngôn ngữ lập trình khác nhau như: C#, C, Java, Perl, PHP, Python,...
Bạn có 2 cách để làm việc với GeoIP2 API:
- Download GeoLite2 có các dữ liệu định vị và sử dụng nó như một cơ sở dữ liệu địa phương. GeoIP2 API sẽ lấy thông tin địa lý theo địa chỉ IP dựa trên nguồn dữ liệu này.
- Sử dụng GeoIP2 API kết nối tới dịch vụ web cung cấp thông thông tin vị trí thông qua địa chỉ IP, cách này bạn cần có một License_Key (Bạn phải mua).
2. Download GeoIP2
Nếu bạn sử dụng Maven:
<!-- http://mvnrepository.com/artifact/com.maxmind.geoip2/geoip2 -->
<dependency>
<groupId>com.maxmind.geoip2</groupId>
<artifactId>geoip2</artifactId>
<version>2.15.0</version>
</dependency>
Hoặc download thư viện này.
3. Download GeoLite2
Để download cơ sở dữ liệu GeoLite2 bạn cần phải đăng ký một tài khoản, việc này hoàn toàn miễn phí.
Sau đó đăng nhập với tài khoản của bạn:
Kết quả download được:
Giải nén 2 file:
4. Tạo nhanh 1 Project làm việc với GeoIP2
Tạo mới một Maven Project.
- File/New/Other...
Nhập vào:
- Group Id: org.o7planning
- Artifact Id: geoip2tutorial
- Package: org.o7planning.geoip2tutorial
Khai báo 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. Ví dụ với GeoIP2
Bạn đã download cơ sở dữ liệu GeoLite2 và đặt nó ở một thư mục địa phương. Ví dụ này sử dụng GeoIP2 Java API lấy ra thông tin địa lý ứng với một địa chỉ IP cụ thể.
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 {
// Một đối tượng File trỏ tới GeoLite2 Database của bạn.
File dbFile = new File(MyConstants.DATABASE_CITY_PATH);
// Tạo ra một đối tượng đọc Database.
// nó có thể tái sử dụng trong các lần tra cứu.
DatabaseReader reader = new DatabaseReader.Builder(dbFile).build();
// Một địa chỉ IP
InetAddress ipAddress = InetAddress.getByName("128.101.101.101");
// Thông tin định vị thành phố ứng với địa chỉ IP.
CityResponse response = reader.city(ipAddress);
// Thông tin quốc gia
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'
// Thông tin Thành phố
City city = response.getCity();
System.out.println("City Name: "+ city.getName()); // 'Minneapolis'
// Thông tin bưu chính (Postal).
Postal postal = response.getPostal();
System.out.println(postal.getCode()); // '55455'
// Vị trí địa lý.
Location location = response.getLocation();
// Vĩ độ
System.out.println("Latitude: "+ location.getLatitude()); // 44.9733
// Kinh độ
System.out.println("Longitude: "+ location.getLongitude()); // -93.2323
}
}
Chạy ví dụ:
6. Ví dụ với GeoIP2 Web Service
Thay vì kết nối vào một cơ sở dữ liệu địa phương để lấy ra thông tin địa lý ứng với địa chỉ IP, bạn có thể sử dụng một dịch vụ web (Web service) cung cấp dữ liệu này. Bạn cần phải mua một LICENSE_KEY. Ví dụ dưới đây hướng dẫn bạn lấy được thông tin địa lý ứng với địa chỉ IP thông qua web service.
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();
// Địa chỉ IP.
InetAddress ipAddress = InetAddress.getByName("128.101.101.101");
// Tra cứu thông tin.
CountryResponse response = client.country(ipAddress);
// Thông tin về quốc gia.
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")); // '美国'
}
}
Các thư viện mã nguồn mở Java
- Hướng dẫn và ví dụ Java JSON Processing API (JSONP)
- Hướng dẫn sử dụng Scribe OAuth Java API với Google OAuth 2
- Lấy thông tin phần cứng máy tính trong ứng dụng Java
- Restfb Java API cho Facebook
- Tạo Credentials cho Google Drive API
- Hướng dẫn sử dụng Java JDOM2 phân tích tài liệu XML
- Hướng dẫn và ví dụ Java XStream
- Hướng dẫn sử dụng Java Jsoup phân tích HTML
- Lấy thông tin địa lý dựa trên địa chỉ IP sử dụng GeoIP2 Java API
- Đọc Ghi file excel trong Java sử dụng Apache POI
- Khám phá Facebook Graph API
- Java Sejda WebP ImageIO chuyển đổi các định dạng ảnh sang WEBP
- Java JAVE Chuyển đổi audio và video sang định dạng mp3
- Thao tác với tập tin và thư mục trên Google Drive sử dụng Java
Show More