java 手机号码归属地查询

下面是利用第三方接口实现手机号码归属地查询 (复制请标明出处或留言)

package com.test.yyc;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class PhoneNumberBelong {
    public static void main(String[] args) {
        String mobileNumber = "13333333333";
        try {
            //System.out.println(calcMobileCity(mobileNumber));
            //System.out.println(queryMobileLocation(mobileNumber));
            System.out.println(queryMobileLocationk780(mobileNumber)); //{address=中国,河北,秦皇岛, area_code=0335}
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static String calcMobileCity(String mobileNumber)
            throws MalformedURLException {
        String result = "";
        try {
            String urlString = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel="
                    + mobileNumber;
            URL url = new URL(urlString);
            URLConnection connection = url.openConnection();
            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(), "GBK"));

            String line;
            while ((line = reader.readLine()) != null) {
                result = result + line;
                result = result + "\n";
            }
            reader.close();
            if (!(StringUtils.isEmpty(result))) {
                Pattern p = Pattern.compile("province:‘([^‘,]*)");
                Matcher m = p.matcher(result);
                while (m.find()) {
                    result = m.group(1);
                }
                connection = null;
                return result;
            }
            return "无此号记录!";
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
    /**
     * 使用k780公司的接口
     * @param tel
     * @return
     * @throws Exception
     */
    public static Map<String, String> queryMobileLocationk780(String tel) throws Exception {
        Pattern pattern = Pattern.compile("1\\d{10}");
        Matcher matcher = pattern.matcher(tel);
        Map<String, String> resultMap = new HashMap<String, String>();
        String address = "";
        String areaCode = "";
        if (matcher.matches()) {
            String url = "http://api.k780.com:88/?app=phone.get&phone=" + tel +"&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json";
            String result = callUrlByGet(url, "UTF-8");
            if (!(StringUtils.isEmpty(result))) {
                JSONObject json = new JSONObject(result);
                if(json.getString("success").equals("1")){ // 请求成功
                    JSONObject resultJson = json.getJSONObject("result");
                    if(resultJson.getString("status").indexOf("NOT") <= -1){
                        address = resultJson.getString("style_simcall");
                        areaCode = resultJson.getString("area");
                    } else {
                        address = "未知归属地";
                    }
                } else { // 请求失败
                    address = "未知归属地";
                    areaCode = "";
                }
            } else {
                address = "未知归属地";
                areaCode = "";
            }

            resultMap.put("address", address);
            resultMap.put("area_code", areaCode);
            return resultMap;
        }

        return resultMap;
    }
    private static String callUrlByGet(String callurl, String charset) {
        String result = "";
        try {
            URL url = new URL(callurl);
            URLConnection connection = url.openConnection();
            connection.connect();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(), charset));

            String line;
            while ((line = reader.readLine()) != null) {
                result = result + line;
                result = result + "\n";
            }
            reader.close();
            connection = null;
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
        return result;
    }
    /**
     * 通过解析 IP138网站的html代码来获取号码归属地信息
     * @param mobile
     * @return
     */
    public static Map<String, String> queryMobileLocation(String mobile){
        String url = "http://www.ip138.com:8080/search.asp?action=mobile&mobile="+mobile;
        Map<String, String> resultMap = new HashMap<String, String>();
        try {
            Document doc = Jsoup.connect(url).get();
            try {
                Elements els = doc.getElementsByClass("tdc2");
                String address = els.get(1).text();
                String areaCode = els.get(3).text();
                String corp = els.get(2).text();
                String postCode = els.get(4).text();
                if(postCode != null && !"".equals(postCode)){
                    postCode = postCode.substring(0, 6);
                }

                String[] addresss = address.split(" ");
                String city = "";
                String province = "";
                if(addresss.length > 0){
                    province = addresss[0];
                    if(addresss.length > 1){
                        city = addresss[1];
                    } else {
                        city = "";
                    }
                } else {
                    province = "";
                    city = "";
                }
                resultMap.put("province", province);
                resultMap.put("city", city);
                resultMap.put("areaCode", areaCode);
                resultMap.put("corp", corp);
                resultMap.put("postCode", postCode);
            } catch (Exception e) {
                e.printStackTrace();
                resultMap.put("province", "");
                resultMap.put("city", "");
                resultMap.put("areaCode", "");
                resultMap.put("corp", "");
                resultMap.put("postCode", "");
            }
        } catch (IOException e) {
            e.printStackTrace();
            resultMap.put("province", "");
            resultMap.put("city", "");
            resultMap.put("areaCode", "");
            resultMap.put("corp", "");
            resultMap.put("postCode", "");
        }

        return resultMap;
    }
}

原文地址:https://www.cnblogs.com/yuyuchen/p/10417220.html

时间: 2024-10-17 06:15:09

java 手机号码归属地查询的相关文章

Java调用免费的WebService示例【天气预报】【国内手机号码归属地查询】

1.免费的WebService地址:http://www.webxml.com.cn/zh_cn/index.aspx 提供了例如:天气预报,手机归属地查询等很多Web服务. 2.调用天气预报服务示例: 使用JDK自带的wsimport命令生成客户端代码: wsimport -keep http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl 发现抛出如下异常: 后来在网上找到了http://blog.sina.com.cn/

【原创】Java实现手机号码归属地查询

网络上已经有很多的手机号码归属地查询的API接口,但是这些接口总是有一些大大小小的缺陷. 总结一下这些缺陷: 1.要直接将它的搜索框链接形式粘到自己的页面,点击查询的时候还要跳转到他们的网站来展示归属地结果 2.提供接口的API,一般都要求付费,或者一天只有免费的限定查询次数 3.有些博客文档中的API已经过于老旧,尝试的时候,已经404Not Found的了 所以写篇博客,供正在做手机归属地查询的小伙伴参考. 思路: ->我找到一个拍拍网的接口,可以通过curl直接传手机号码来进行查询,并且会

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

前天无意间在网上看到百度ApiStore,然后好奇就进去看了看.正好最近在某博培训Android,刚学到java基础.抱着锻炼的心态选择手机号码归属地查询api进行练手.api地址 (http://apis.baidu.com/apistore/mobilephoneservice/mobilephone).百度官方已经给出请求示例 .我们只需要对请求结果json进行解析就可以. Java请求示例: 1 String httpUrl = "http://apis.baidu.com/apisto

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

最近做的项目中,有个功能是手机归属地查询,因为项目要在内网下运行,所以不能用提供的webservice,只好在网上找手机归属地的数据,很多都是access的,我们的项目是用oracle,只好自己转吧,转过来的提供到网上,方便大家使用.数据还是比较新的,是2014年的. 下面是部分代码,如果需要全部代码,可以直接下载. TabMobileServiceImpl.java package com.zhouyu.service.impl; import java.util.List; import o

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

根据手机号码查询用户的卡类型.运营商.归属地.区域等信息. 手机归属地实体类 package org.wx.xhelper.model; /** * 手机归属地 * @author wangxw * @version 1.0 * @date Jul 9, 2014 4:03:04 PM */ public class PhoneBelong { // 电话号码 private String phone; // 手机号码所在地区区号 private String area; // 号码卡类型 pr

Android中手机号码归属地查询实现

这部分是昨天学习的,但是因为眼睛超负荷所以拖到现在,以后要合理规划时间. 目前手机里面的号码归属地查询主要是通过两种方式:1.联网查询,2.匹配本机归属地数据库. 我认为两种结合方式最好,在本地数据库中匹配不到的在进行联网查询,能大大增加匹配效果,并且不用过于增加本地数据库容量而增大安装包大小. 步骤:1.开启软件的时候把数据库从assets目录拷贝到files目录下,如果已存在,则不用重新拷贝. 2.实现界面. 3.实现工具类PhoneAddressUtils的getPhoneAddress(

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

淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443参数: tel:手机号码 返回:JSON 拍拍 API地址: http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000&callname=getPhoneNumInfoExtCallback参数: mobile:手机号码

手机号码归属地查询接口大全(七种)

淘宝网 API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON 拍拍 API地址: http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000&callname=getPhoneNumInfoExtCallback 参数: mobile:手机

ajax手机号码归属地查询

<input ....手机号码框><input type="button" onclick="checkPhone()"> function checkPhone(){var zjsjhm = docunent.get...//获取手机号码if(searchAreaMobilePhoneFromIndex(zjsjhm)){//验证手机号 searchMobilePhoneGuiSuArea(zjsjhm);//查询手机归属地 }:} //验