开发者学堂课程【2020版大数据实战项目之 DMP 广告系统(第五阶段):IP 转换_GeoLite】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/680/detail/11808
IP 转换_GeoLite
选用 GeoLite 确定经纬度
1、本课程学习 GeoLite 如何使用?可以把 IP 转为省市信息,使用 GeoLite获取经纬度信息。使用 GeoLite 分为三步,第一步要复制一个数据集,这个数据集叫做 GeoLiteCity.dat ,把这个文件拷贝到 dataset 下,这个文件就是 GeoLite 框架附赠的数据集。第二步需要在 Maver pom.xml 配置文件当中导入两个依赖。
com. maxmind. geoip
gecip-api
1.3.0
com. maxmind.geoip2
geoip2
2.12.0
第一个叫做 geoip-api ,第二个叫做 geoip2。第三步就可以进行详细的编写。
val lookupService= new LookupService("dataset/GeoLiteCity. dat",
LookupService.GEOIP_MEMORY_CACHE)
val location = lookupService.getLocation("121.76.98.134")
println(location. latitude, location. longitude)
2、第一步拷贝 GeoLiteCity.dat 数据文件,进入到 files 目录下,在 files 目录下有一个叫 GeoLiteCity.dat 的文件,把它拷贝到 dataset 目录下,然后就可以进行相应 Maver 的导入。复制 Maver 的 dependency,复制完以后回到 IDEA 中,打开 pom.xml 文件,在 pom.xml 文件 IP 后面追加两个新的库,一个叫 geoip-api,一个叫 geoip2,这两个加载完以后就可以进行具体的代码编写。在进行代码编写时,还是先创建一个新的文件,打开 test,在 IPTest 当中先创建一个方法。location 一般指经纬度信息,把 ip 转为 Longitude 和 Latitude,一个是经度,一个是纬度。
3、转换整体步骤分为三步,第一步新创建搜索类,第二步进行搜索,第三步进行打印。入口叫做 service,service 叫做 LookupService 类,LookupService 当中接收两个参数,第一个参数是数据集的位置,数据集在 dataset 下叫做 GeoLiteCity.dat 。还有一个参数需要设置,这个参数是缓存的方式,缓存的方式
LookupService.GEOIP_MEMORY_CACHE,在内存里面缓存。Service 已经创建完成,一般情况下有两个参数,一行写不完可以分为两行。
下面进行搜索,service 有一个方法叫 getLocation,getLocation 当中还要进行 IP 的搜索,IP 用121.76.98.134。这个时候就获取到了一个对象,对象是 location 的对象。Location 对象的类型是一个叫做 Location 的类型。
4、最后进行打印,location.longitude,location.latitude,这个时候就已经把信息打印出来了,打印出来以后运行这段代码。
/**
*IP->Longitude, Latitude
*/
@Test
def ip2Location(): Unit = {
// 1.创建入口
val service=new LookupService(databaseFile= "dataset/
GeoLitCity. dat",
LookupService.GEOIP MEMORY CACHE
)
//2.搜索
val location:Location=service.getLocation(str="121.76.98.134")
//3.打印
println(location. Longitude, location. Latitude)
}
}
结果已经打印出来了,39969是经度,0455934纬度。
这样就结束了,会发现这些小工具使用起来还是比较方便简单的。之前提到过 GeoLite 里面会有一些问题,这个问题可以 location 打印一下,然后可以看到 area,看到 city、countryCode,还有 region,region 指的是省。
location.city 再来运行一下,看看他的省和市打印出来的内容是怎样的?直接region 的话打印的是 region 的 code,市的信息打印出来的是上海,但是它是拼音。如果想把拼音转化为中文,还是很麻烦的,所以干脆使用 ip2Region 这个工具类,这个工具类使用起来还是比较方便的。