更新手机归属地列表
大约 7 分钟
更新归属地列表流程
在实际工作生产中会对大量的手机号码进行归属地查询,一直使用网络API 免费易失效,付费消耗高,于是自建了归属地表
归属地表示例
id | mobileprefix | areacode | city | memo |
---|---|---|---|---|
1 | 1952561 | 10 | 北京-北京 | 移动195卡 |
2 | 1956875 | 10 | 北京-北京 | 移动195卡 |
3 | 1579088 | 10 | 北京-北京 | 移动157卡 |
4 | 1952547 | 10 | 北京-北京 | 移动195卡 |
5 | 1952929 | 10 | 北京-北京 | 移动195卡 |
6 | 1953750 | 10 | 北京-北京 | 移动195卡 |
id | mobileprefix | areacode | city | memo |
---|---|---|---|---|
456338 | 1999099 | 999 | 新疆-伊犁 | 电信199卡 |
456339 | 1999096 | 999 | 新疆-伊犁 | 电信199卡 |
456340 | 1999097 | 999 | 新疆-伊犁 | 电信199卡 |
456341 | 1999923 | 999 | 新疆-伊犁 | 电信199卡 |
456342 | 1999924 | 999 | 新疆-伊犁 | 电信199卡 |
456343 | 1999943 | 999 | 新疆-伊犁 | 电信199卡 |
456344 | 1999927 | 999 | 新疆-伊犁 | 电信199卡 |
地区-区号映射表示例
areacode | city |
---|---|
10 | 北京-北京 |
20 | 广东-广州 |
21 | 上海-上海 |
22 | 天津-天津 |
areacode | city |
---|---|
996 | 新疆-库尔勒 |
996 | 新疆-巴音郭楞 |
997 | 新疆-阿克苏 |
998 | 新疆-喀什 |
999 | 新疆-伊犁 |
可以看到归属地中有45万条相关记录
现有一批号码,无法匹配现有数据,需要进行归属地查询然后更新现有归属地列表
- 完成被叫号码清洗,转换为11位手机号,剔除非法数据,得到区号列表
- 对区号列表进行去重,重做手机号,进行逗号格式转换,等待API批量查询
- 去重和重写手机号一方面是保护用户数据隐私,一方面减少API请求量
被叫 | 客户真实手机号 | 区号 | 去重区号 | 重写手机号 |
---|---|---|---|---|
7035519353315435 | 19353315435 | 1935331 | 1935331 | 19353311111 |
7035516593621769 | 16593621769 | 1659362 | 1659362 | 16593621111 |
7035519279572417 | 19279572417 | 1927957 | 1927957 | 19279571111 |
7035519075698040 | 19075698040 | 1907569 | 1907569 | 19075691111 |
7035519381122510 | 19381122510 | 1938112 | 1938112 | 19381121111 |
7035519531428939 | 19531428939 | 1953142 | 1953142 | 19531421111 |
7035519911591970 | 19911591970 | 1991159 | 1991159 | 19911591111 |
7035519315011548 | 19315011548 | 1931501 | 1931501 | 19315011111 |
7035516593623203 | 16593623203 | 1659362 | 1951797 | 19517971111 |
7035519517970177 | 19517970177 | 1951797 | 1937668 | 19376681111 |
7035519376681298 | 19376681298 | 1937668 | 1669085 | 16690851111 |
7035516690858888 | 16690858888 | 1669085 | 1937410 | 19374101111 |
7035519374100648 | 19374100648 | 1937410 | 1952247 | 19522471111 |
7035519522478154 | 19522478154 | 1952247 | --- | --- |
得到重做手机号列表
19353311111,16593621111,19279571111,19075691111,19381121111,19531421111,19911591111,19315011111,19517971111,19376681111,16690851111,19374101111,19522471111
- 进行API测试,根据API返回结果进行构建批量查询脚本(作者用的是java,其他语言应该会更快) API地址*https://cx.shouji.360.cn/phonearea.php?number=*
GET https://cx.shouji.360.cn/phonearea.php?number=19353311111
{
"code": 0,
"data": {
"province": "山东",
"city": "淄博",
"sp": "电信"
}
}
- 编写API请求脚本 引入JSON依赖,这里使用的是google的Gson; 编写实体类,需要自行补充get/set方法; 编写请求脚本
//引入依赖
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'com.google.code.gson:gson:2.8.5'
}
//实体类
public class PhoneProvince {
private Long code;
private Province data;
class Province {
//省份
private String province;
//城市
private String city;
//运营商
private String sp;
}
}
//请求脚本
public static void main(String[] args) throws Exception {
String phones="19353311111,16593621111,19279571111,19075691111,19381121111,19531421111,19911591111,19315011111,19517971111,19376681111,16690851111,19374101111,19522471111";
//逗号分割转list
List<String> result = Arrays.asList(phones.split(","));
String fileName="C:\\Users\\EDY\\Desktop\\筛选.txt";
for(String phone:result) {
String string = get("https://cx.shouji.360.cn/phonearea.php?number="+phone);
// 创建Gson对象
Gson gson = new Gson();
// 反序列化
PhoneProvince person = gson.fromJson(string, PhoneProvince.class);
//拼接字符串 空格分割
String str=phone +" "+person.getData().getProvince()+" "+person.getData().getCity()+" "+person.getData().getSp();
//追加输出到文件夹
try(PrintWriter outPrintWriter=new PrintWriter(new FileWriter(fileName,true))){
outPrintWriter.println(str);
}
}
}
- 得到运行结果进行格式化处理,得到相关数据 前七位手机号 区号 省份-城市 ,运营商+手机前缀+卡
请求返回数据 | 省份 | 城市 | 运营商 |
---|---|---|---|
19353311111 | 山东 | 淄博 | 电信 |
16593621111 | 江苏 | 连云港 | 移动 |
19279571111 | 宁夏 | 银川 | 广电 |
19075691111 | 广东 | 深圳 | 电信 |
19381121111 | 四川 | 绵阳 | 电信 |
19531421111 | 江苏 | 苏州 | 移动 |
19911591111 | 湖南 | 长沙 | 电信 |
19315011111 | 安徽 | 宿州 | 电信 |
19517971111 | 浙江 | 杭州 | 移动 |
19376681111 | 湖南 | 长沙 | 电信 |
16690851111 | 河南 | 驻马店 | 联通 |
19374101111 | 湖南 | 长沙 | 电信 |
19522471111 | 陕西 | 西安 | 移动 |
- 将相关数据先复制总表中,重新排序,重做序列号,完成归属地表的更新