不写R包的分析师不是好全栈

R-hacker: 用APItools反解析IP地址

    R



APItools是一个R包,可以方便的调用百度APIstore即用API,可以反解析IP地址,获取天气数据,机器人对话,查询各类信息,反解析ID卡信息等,这里用反解析IP地址来做个简单的示范.


首先,你需要一些准备工作,安装包,以及获取一个APIkey



安装和加载


# devtools::install_github("lchiffon/APIstore")
library(APItools)



获取APIkey


apistore.baidu.com注册并申请,手机验证后,在每个API界面都可以看到你的APIkey


1


用以下代码设置你的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")


page PV:  ・  site PV:  ・  site UV: