记一次IP数据处理过程,文本(CSV文件)处理,IP解析

个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview


起因

突然接收到XX给的任务,要将一批IP数据处理一下,将IP对应的省市区解析出来,很急!

已知我这边有一个IP解析接口,提供了IP解析到国家省市区ISP等的能力,而且支持批量查询,但问题是仅仅有接口的形式,没有管理应用将接口利用起来,要使用的恐怕也只能是发接口,而且XX提供的数据有极大可能是Excel格式。另外XX没有说明解析后的数据怎么给出来,如果是Excel最好就是将数据放在一行标记为省市区就好。这么看来只能是临时开发来完成了,经过分析此时已经有了大致的思路了。

果然!拿到的数据是xls格式,大致如下。共有几百条。

a b c ip
123 234 345 127.0.0.1

那就动手开发吧!从接受到任务到结束大概用了40分钟,这不是炫耀什么,毕竟使用AI可能会更快更好,但这毕竟是临时做的,完成的也还可以,我还挺欣慰的。

思路

任何临时紧急的任务,第一目标都应该在时间要求内是完成它,所以总体思路就是先完成后优化。

其实做起来也很简单

1、整理原始数据,也可以叫做数据清理。

2、读IP数据

3、整合请求,发接口进行IP解析

4、解析数据补充在原数据上

5、输出

这里提供了示例数据,IP数据来源于在线ip地址随机生成器 - JSON中文网,其他数据都是随机生成,一共270条。

📎示例IP.xlsx

关于接口,这里只能用一些开放的IP解析接口了,这里用的是https://api.vvhan.com/api/ipInfo?ip=58.154.0.0

使用如上图所示。

开始

原数据处理

本身数据很完整,所以这个步骤就没有什么参考意义了。

关于文件格式,不管是xls还是xlsx都属于微软Ecxel标准的电子表格格式,或扩展。都已经进行Office文件处理的范畴了,相比于简单的文本处理还是麻烦了点,这里为了方便将其另存为csv文件,进行文本处理。

工具上使用CSV文件处理工具-CsvUtil

这里需要注意了,使用csv工具处理的文本,需要有行头,所以在第一行加入了id,ip,用于读取。

一些实体类

读取csvJavaBean如下。

java 复制代码
@Data
public class IpItem {

    private String id;
    private String ip;
    @Alias("国家")
    private String country;
    @Alias("省份")
    private String prov;
    @Alias("城市")
    private String city;
}

以上已将说明了要使用https://api.vvhan.com/api/ipInfo?ip=58.154.0.0作本次示例,响应报文如下。

json 复制代码
{
  "success": true,
  "ip": "58.154.0.0",
  "info": {
    "country": "中国",
    "prov": "辽宁省",
    "city": "沈阳市",
    "isp": "教育网"
  }
}

这里可以使用JSONJavaBean的工具,不管是GsonFormatPlus插件还是其他在线工具都可以。

GsonFormatPlus - IntelliJ IDEs Plugin | Marketplace

JSON转JAVA实体|在线JSON转JavaBean工具 - JSON中文网

由此得到IpRespDTOIpInfo

java 复制代码
@Data
public class IpRespDTO {
    private Boolean success;
    private String ip;
    private IpInfo info;
}
java 复制代码
@Data
public class IpInfo {
    private String country;
    private String prov;
    private String city;
    private String isp;
}

因为此接口请求比较简单,所以就没有额外的请求类了。

请求接口方式

关于方式,之前我有两篇文章可以参考,这里使用OpenFeign

Spring6.1新特性,四种方式调用REST接口(RestClient、WebClient、RestTemplate、HTTP Interface)

Spring6|Spring Boot3有哪些HTTP客户端可以选择

xml 复制代码
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
java 复制代码
@FeignClient(name = "ipAnalysisFeignService", url = "https://api.vvhan.com/api")
public interface IpAnalysisFeignService {


    @GetMapping("/ipInfo")
    IpRespDTO getIpInfo(@RequestParam("ip") String ip);
}

数据处理与输出

java 复制代码
@Slf4j
@SpringBootTest
public class IpAnalysisFeignServiceTest {

    @Resource
    private IpAnalysisFeignService ipAnalysisFeignService;

    @Test
    void getIpInfo() {
        List<IpItem> ipItemList = CsvUtil.getReader().read(
                ResourceUtil.getUtf8Reader("示例IP.csv"), IpItem.class);
        ipItemList.forEach(ipItem -> {
            IpRespDTO ipRespDTO = ipAnalysisFeignService.getIpInfo(ipItem.getIp());
            log.info("ip:{},info:{}", ipItem.getIp(), ipRespDTO);
            if (ipRespDTO.getSuccess()) {
                IpInfo info = ipRespDTO.getInfo();
                ipItem.setCountry(info.getCountry()).setProv(info.getProv()).setCity(info.getCity());
            }
        });
        CsvWriter writer = CsvUtil.getWriter("/Users/wnhyang/Downloads/testWrite.csv", CharsetUtil.CHARSET_UTF_8);
        writer.writeBeans(ipItemList);
    }
}

日志如下,共花费了43秒,没办法这是开放的接口,性能确实差了点,而且是270次请求。

输出文件如下,好吧,一些ip可能解析不到,但也是完成了任务。

结束

当时一共用了40分钟左右,你可能讲了,用Java进行数据处理?咋不用Python?能合并请求吗?能不能再优化一下?

确实有优化的地方,但是开头我也讲了,临时紧急任务第一目标是在时间要求内完成,在完成后可以再思考优化。

而且,顺带提一点,平常可以做一些积累,在面对复杂的紧急任务时就会很从容了。https://github.com/wnhyang)

写在最后

拙作艰辛,字句心血,望诸君垂青,多予支持,不胜感激。


个人博客:无奈何杨(wnhyang)

个人语雀:wnhyang

共享语雀:在线知识共享

Github:wnhyang - Overview

相关推荐
boy快快长大7 小时前
将大模型生成数据存入Excel,并用增量的方式存入Excel
java·数据库·excel
Leuanghing8 小时前
使用Python生成F分布表并导出为Excel文件
开发语言·python·excel·f分布
爱编程的小生8 小时前
Easyexcel(4-模板文件)
java·excel
今日之风甚是温和10 小时前
【Excel】拆分多个sheet,为单一表格
java·excel·sheet·vb宏
如意机反光镜裸10 小时前
Excel如何批量导入图片
excel
滨HI01 天前
python中Pandas操作excel补全内容
python·excel·pandas
Leuanghing1 天前
使用Python生成卡方分布表并导出为Excel文件
python·excel·pandas·scipy·卡方分布表
叮当喵是mao1 天前
python基础知识(七)——写入excel
android·python·excel
阿呆5911 天前
使用 Excel 的功能来快速在 TXT 文件中添加一列零
excel
Benaso1 天前
使用Python编写脚本,为Excel表格添加水印
python·excel