网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷。

总结一下这些缺陷:

1、要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属地结果

2、提供接口的API,一般都要求付费,或者一天只有免费的限定查询次数

3、有些博客文档中的API已经过于老旧,尝试的时候,已经404Not Found的了

所以写篇博客,供正在做手机归属地查询的小伙伴参考。

思路:

  ->我找到一个拍拍网的接口,可以通过curl直接传手机号码来进行查询,并且会返回给我们一个类似json的字符串(其实不是Json,就是一些字符串里面有我们想要的信息)

  ->java通过HttpURLConnection去连接这个地址,并且抓取到所返回页面的所有字符串,这些字符串中就含有上述的类json的结果

  ->那我们拿到这个字符串,解析出我们想要的通讯商和省份城市等信息就可以了

说明:

  拍拍网查手机归属地地址:http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000

  参数说明:mobile:手机号码

       amount:未知(但是必须要有,不然查询不出结果)
  返回值:类似JSON的字符串
具体实现:
  

 /**
* @ClassName: HttpClientUtil
* @Description: html页面抓取素有字符串工具类
* @author: chenkaideng
* @date 2015年11月2日 下午3:55:49
*/ import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class HttpClientUtil {
private static final Logger logger = LoggerFactory.getLogger("HttpClient");
private String readInputStream(InputStream instream, String charest) throws Exception {
StringBuilder sb = new StringBuilder();
try(
InputStreamReader isr = new InputStreamReader(instream, charest);
BufferedReader reader = new BufferedReader(isr);) {
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
}
return sb.toString(); } public String getWebcontent(String webUrl, String charest) {
if (StringUtils.isEmpty(webUrl))
return null;
int response = -1;
HttpURLConnection conn = null;
try {
URL url = new URL(webUrl);
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(60 * 2000);
conn.setConnectTimeout(10 * 1000);
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");
conn.setDoOutput(true);
conn.connect();
response = conn.getResponseCode();
if (response == 200) {
InputStream im = null;
try {
im = conn.getInputStream();
return readInputStream(im, charest);
} finally {
IOUtils.closeQuietly(im);
}
}
return null;
} catch (Exception e) {
logger.error(String.format("下载到文件出错[url=%s][%s][responsecode=%d]", webUrl, e.getMessage(), response));
return null;
} finally {
if(conn != null) {
conn.disconnect();
conn = null;
}
}
}
}

  然后调用上述的工具类,带着手机号码参数去访问拍拍的接口地址,抓到页面,解析出归属地信息就可以了

 import com.alibaba.fastjson.JSONObject;
/**
*
* @ClassName: GetMobileMessage
* @Description: TODO
* @author chenkaideng@star-net.cn
* @date 2016年1月28日 下午2:40:56
*
*/
public class GetMobileMessage{
private static final String PHONE_PLACE_API_URL="http://virtual.paipai.com/extinfo/GetMobileProductInfo";
/**
*
* @Title: getMobilePlace
* @Description: 获取手机归属地信息
* @param @param mobile
* @param @return
* @return String
* @throws
*/
public String getMobilePlace(String mobile){
HttpClientUtil util = new HttpClientUtil();
String[] strings={"",""};
try {
//访问拍拍的查询接口
String mobileMessage = util.getWebcontent(PHONE_PLACE_API_URL+"?mobile="+mobile+"&amount=10000", "GB2312");
strings = mobileMessage.split(";");
//(页面获取到的消息,除了这些,还有一些html语句)
// string[0]="({mobile:'15850781443',province:'江苏',isp:'中国移动',stock:'1',amount:'10000',maxprice:'0',minprice:'0',cityname:'南京'})";
mobileMessage = strings[0];
JSONObject jsonObject = JSONObject.parseObject(mobileMessage.substring(1, mobileMessage.length()-1));
//解析出省份和city和运营商
String province = jsonObject.getString("province");
String cityname = jsonObject.getString("cityname");
String isp = jsonObject.getString("isp");
return isp+"&nbsp"+province+cityname;
} catch (Exception e) {
e.printStackTrace();
// logger.error(strings[0]+e.toString());
return "";
}
}
}

这样就可以免费得到手机号的归属地信息了,而且可以作为自己的一个工具方法使用,大家爱怎么封装就怎么封装,

不然查个归属地还要收费还要给别人网站做广告,实属不爽啊。

但是唯一的缺陷就是,拍拍要是把这个地址一改,就得跟着改咯。

不过没关系,都给整这个思路,什么地址什么接口都能整出归属地。

 

【原创】Java实现手机号码归属地查询的更多相关文章

  1. java 手机号码归属地查询

    下面是利用第三方接口实现手机号码归属地查询 (复制请标明出处或留言) package com.test.yyc; import java.io.BufferedReader; import java. ...

  2. 本地的手机号码归属地查询-oracle数据

    最近做的项目中,有个功能是手机归属地查询,因为项目要在内网下运行,所以不能用提供的webservice,只好在网上找手机归属地的数据,很多都是access的,我们的项目是用oracle,只好自己转吧, ...

  3. 百度手机号码归属地查询api与返回json处理

    前天无意间在网上看到百度ApiStore,然后好奇就进去看了看.正好最近在某博培训Android,刚学到java基础.抱着锻炼的心态选择手机号码归属地查询api进行练手.api地址 (http://a ...

  4. 免费的手机号码归属地查询API接口文档

    聚合数据手机号码归属四查询API接口,根据手机号码或手机号码的前7位,查询手机号码归属地信息,包括省份 .城市.区号.邮编.运营商和卡类型. 通过链接https://www.juhe.cn/docs/ ...

  5. PHP实现 手机号码归属地查询

    在工作中需要对手机号码进行归属地查询,就在网上找了下解决方案,发现通过号段非常好判断. 我将数据库文件放到了百度网盘,请有需要的朋友去下载. 链接: https://pan.baidu.com/s/1 ...

  6. C# Winform实现手机号码归属地查询工具

    摘要:本文介绍使用C#开发基于Winform的手机号码归属地查询工具,并提供详细的示例代码供参考. 一.需求描述 输入正确的手机号码,查询该号码的归属地和其他相关信息. 二.需求分析 1.实现手机号码 ...

  7. 手机号码归属地查询免费api接口代码

    依据手机号码查询用户的卡类型.运营商.归属地.区域等信息. 手机归属地实体类 package org.wx.xhelper.model; /** * 手机归属地 * @author wangxw * ...

  8. 手机号码归属地查询api接口

    淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...

  9. PHP手机号码归属地查询API接口

    淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON ...

随机推荐

  1. 后缀数组 --- HDU 3518 Boring counting

    Boring counting Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=3518 Mean: 给你一个字符串,求:至少出 ...

  2. 实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

    实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624 ...

  3. 怎样用C#代码知道是否已连接网络

    有时,上传数据和下载数据都需要用到网络,但是不知道程序是否已连接到网络,下面是简单测试是否已连接网络的小功能 1.在winform窗体上添加一个按钮和多选框

  4. 你可以做一个更好的Coder为了自己的将来

    小小的星辰 工作已经一年多了,时间真的好快啊!发现自己还是终于走出了当初的阴影!我可以快乐的做我自己了.这两年发现自己改变了很多!很庆幸,我可以不想你了!伤感的心情总会过去的.还记得曾经说过一句:“离 ...

  5. 在windows下配置Eclipse + go环境

    http://blog.csdn.net/hengyunabc/article/details/7371446 本文章地址:http://blog.csdn.net/hengyunabc/articl ...

  6. PHP生成图片验证码demo【OOP面向对象版本】

    下面是我今天下午用PHP写的一个生成图片验证码demo,仅供参考. 这个demo总共分为4个文件,具体代码如下: 1.code.html中的代码: <!doctype html> < ...

  7. [python拾遗]列表

    python列表拾遗 1.列表可以修改,使用 ‘+’ 将一个新列表附加在原列表的尾部: >>> a = [1,'a'] >>> b = a + [2,'b'] &g ...

  8. [python学习笔记]Day1

    初识python 第一个python程序: print('Hello,Python') >>>Hello,Python python2与python3的一些主要的区别: 1.在pyt ...

  9. 你还记的那一年你我学习的-->>用表组织数据*(数据表)

    不知不觉,踏上IT之路,光阴似箭,日月如梭.虽好像回到从前,回到那个无忧无虑的童年,回到那个花样少年的青春;回到那个年少幼稚的小学;回到那个整天幻想的初中;回到那个顽强不屈,誓死不弃的高中;回到那个整 ...

  10. ahjesus js 快速求幂

    /* 快速幂计算,传统计算方式如果幂次是100就要循环100遍求值 快速幂计算只需要循环7次即可 求x的y次方 x^y可以做如下分解 把y转换为2进制,设第n位的值为i,计算第n位的权为x^(2^(n ...