R-hacker: 用APItools反解析IP地址
APItools是一个R包,可以方便的调用百度APIstore的即用API,可以反解析IP地址,获取天气数据,机器人对话,查询各类信息,反解析ID卡信息等,这里用反解析IP地址来做个简单的示范.
首先,你需要一些准备工作,安装包,以及获取一个APIkey
安装和加载
# devtools::install_github("lchiffon/APIstore")
library(APItools)
获取APIkey
在apistore.baidu.com注册并申请,手机验证后,在每个API界面都可以看到你的APIkey
用以下代码设置你的APIkey
APIStore.init("Your API Key")
获取IP的函数
APIstore提供了很多可用的API接口,比如http://apistore.baidu.com/apiworks/servicedetail/114.html就提供了一个反解析IP的API,接下来,使用APItools的函数来封装一下这个API:
APIstore
用于封装函数- 传入可以是API的网址(http://….)
- 或者一个数值(.html之前的编号,比如114就是反解析IP的编号)
- 返回一个函数
- 使用
summary
,info
等功能查看该函数的功能
- 使用
ip = APIStore(114)
summary(ip)
————–URL————-
http://apistore.baidu.com/apiworks/servicedetail/114.html
———Introduction——–
提供rest风格的IP地址查询接口,只需要简单的调用这个接口,并且提供ip地址就能得到IP相关的信息
———Parameter———-
Name: ip
Description:ip地址
Default:117.89
——-Other Information——
{
"errNum": 0,
"errMsg": "success",
"retData": {
"ip": "117.89.35.58",
"…
- 调用函数(可以用tab来查看参数~)
ip("202.100.209.158")
……
$retData$country
[1] "中国"
$retData$province
[1] "海南"
$retData$city
[1] "三亚"
…..
可以看到,这个函数获取了IP的很多信息.接下来,最好还要把这个函数打包一下,只保留我们想要的信息,这部分只能手动了.
建议使用try来试验下是否内容能提取出需要的信息,因为如果参数错误的话,也会返回list的
getProvince = function(ipAdd){
result = ip(ipAdd)
a = try(result$retData$province)
return(a)
}
getProvince("202.100.209.158")
[1] "海南"
最后把所有的代码放在一起,方便大家调试:
# devtools::install_github("lchiffon/APIstore")
library(APItools)
APIStore.init("Your API Key")
ip = APIStore(114)
# summary(ip)
# ip("202.100.209.158")
getProvince = function(ipAdd){
result = ip(ipAdd)
a = try(result$retData$province)
return(a)
}
# getProvince("202.100.209.158")