调用手机在线API获取手机号码归属地信息

手机在线(www.showji.com)始创于2001年,发展至今已拥有国内最准确、号段容量最大的手机号码归属地数据库系统,

目前号段容量将近33万条,每月保持两次以上规模数据更新,合作伙伴包括:百度、淘宝、腾讯、搜狗、小米手机、宝马汽车、

神马搜索、点心OS等。

手机在线号码归属地提供WebService、HTTP API、免费调用和付费数据库四种使用方式:

可以通过URL GET超链接的方式来获取手机号归属地信息,每IP每分钟调用20次的限制,具体实现如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 通过手机号码,获得该号码的归属地、运营商等信息
*/
public class ShoujiHelper {

    public static final String SHOUJI_URL = "http://v.showji.com/Locating/showji.com2016234999234.aspx";
    public static final String REGEX_IS_MOBILE ="(?is)(^1[3|4|5|7|8][0-9]\\d{4,8}$)";// 正则表达式,可以只输入手机号码前7位

    /**
     * 根据手机号码获取归属地信息
     * @param mobileNumber
     * @throws Exception
     */
    public static String getMobileFrom(String mobileNumber) throws Exception {
        if (!veriyMobile(mobileNumber)) {
            throw new Exception("不是完整的11位手机号或者正确的手机号前七位");
        }

        String URL = SHOUJI_URL+"?m="+mobileNumber+"&output=json&callback=querycallback&timestamp="+System.currentTimeMillis();
        String result = HttpUtil.readContentFromGet(URL);
        if( result != null ){
            result = StringUtils.substringBetween(result, "(", ")");
        }
        return result;
    }

    /**
     *验证手机号格式 是否符合
     *@param mobileNumber
     */
    public static boolean veriyMobile(String mobileNumber) {
        Pattern p = Pattern.compile(REGEX_IS_MOBILE);
        Matcher m = p.matcher(mobileNumber);
        return m.matches();
    }

    //测试一下
    public static void main(String[] args) throws Exception {

        long[] phones={
                18190282387L,18081685555L,18013715591L,18092163043L,18370631995L,
                18026799125L,18056538590L,18038692012L,18083766020L,18092015835L,
                18060923366L,18078158869L,18041153288L,18028690873L,18028796251L,
                13585859733L,15961230678L,18937295656L,18056649455L,15640694239L,
                18958283918L,18966551516L,15353951523L,18025114334L,15071469692L,
                15139914717L,13738618263L,13181207626L,13516035175L,15327038012L,
                18659138399L,15151920785L,18969515188L,13064025146L,15619969722L
        };

        int successNum = 0, dealNum = 20;
        for(int i=0; i < dealNum; i++){
            String result = getMobileFrom(phones[i]+"");
            System.out.println(result);
            if (result!=null && result.contains("True")) {
                successNum++;
            }
        }

        System.out.println("=========================");
        System.out.println("|    处理的号码总数=="+dealNum);
        System.out.println("|    获取成功的个数=="+successNum);
        System.out.println("|    获取失败的个数=="+(dealNum-successNum));
        System.out.println("=========================");
    }
}

通过GET_URL调用接口获取内容的工具类HttpUtil

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.apache.commons.io.IOUtils;

public class HttpUtil {

    /**
     * 通过GET_URL调用接口获取内容
     */
    public static String readContentFromGet(String GET_URL) throws IOException {
        String result = null;
        BufferedReader reader = null;
        HttpURLConnection connection = null;

        try{
            String getURL =  GET_URL;
            URL getUrl = new URL(getURL);

            // 根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,
            connection = (HttpURLConnection) getUrl.openConnection();
            connection.setConnectTimeout(30000);
            connection.setReadTimeout(30000);
            connection.setRequestProperty("Accept-Charset", "UTF-8");
            connection.setRequestProperty("contentType", "UTF-8");
            connection.setRequestProperty("Content-Type", "text/xml; charset=utf-8");

            // 进行连接
            connection.connect();
            // 取得输入流,并使用Reader读取
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"UTF-8"));

            String line = null;
            StringBuffer lines = new StringBuffer();
            while ((line = reader.readLine()) != null) {
                lines.append(line);
            }

            result = lines.toString();
        } catch (Exception e) {
            System.out.println("GET_URL Result Exception : "+e.getMessage());
        } finally {
            // 释放资源 断开连接
            IOUtils.closeQuietly(reader);
            connection.disconnect();
            connection = null;
        }
        return result;
    }
}

每IP每分钟调用20次输出结果:

{"Mobile":"18190282387","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"四川","City":"资阳","AreaCode":"0832","PostCode":"641300","VNO":"","Card":""}
{"Mobile":"18081685555","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"四川","City":"资阳","AreaCode":"0832","PostCode":"641300","VNO":"","Card":""}
{"Mobile":"18013715591","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"江苏","City":"苏州","AreaCode":"0512","PostCode":"215000","VNO":"","Card":""}
{"Mobile":"18092163043","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"陕西","City":"西安","AreaCode":"029","PostCode":"710000","VNO":"","Card":""}
{"Mobile":"18370631995","QueryResult":"True","TO":"中国移动","Corp":"中国移动","Province":"江西","City":"吉安","AreaCode":"0796","PostCode":"343000","VNO":"","Card":""}
{"Mobile":"18026799125","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"广东","City":"江门","AreaCode":"0750","PostCode":"529000","VNO":"","Card":""}
{"Mobile":"18056538590","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"安徽","City":"芜湖","AreaCode":"0553","PostCode":"241000","VNO":"","Card":""}
{"Mobile":"18038692012","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"广东","City":"佛山","AreaCode":"0757","PostCode":"528000","VNO":"","Card":""}
{"Mobile":"18083766020","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"江苏","City":"扬州","AreaCode":"0514","PostCode":"225000","VNO":"","Card":""}
{"Mobile":"18092015835","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"陕西","City":"西安","AreaCode":"029","PostCode":"710000","VNO":"","Card":""}
{"Mobile":"18060923366","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"福建","City":"厦门","AreaCode":"0592","PostCode":"361000","VNO":"","Card":""}
{"Mobile":"18078158869","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"广西","City":"南宁","AreaCode":"0771","PostCode":"530000","VNO":"","Card":""}
{"Mobile":"18041153288","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"辽宁","City":"大连","AreaCode":"0411","PostCode":"116000","VNO":"","Card":""}
{"Mobile":"18028690873","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"广东","City":"广州","AreaCode":"020","PostCode":"510000","VNO":"","Card":""}
{"Mobile":"18028796251","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"广东","City":"深圳","AreaCode":"0755","PostCode":"518000","VNO":"","Card":""}
{"Mobile":"13585859733","QueryResult":"True","TO":"中国移动","Corp":"中国移动","Province":"上海","City":"上海","AreaCode":"021","PostCode":"200000","VNO":"","Card":""}
{"Mobile":"15961230678","QueryResult":"True","TO":"中国移动","Corp":"中国移动","Province":"江苏","City":"常州","AreaCode":"0519","PostCode":"213000","VNO":"","Card":""}
{"Mobile":"18937295656","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"河南","City":"安阳","AreaCode":"0372","PostCode":"455000","VNO":"","Card":""}
{"Mobile":"18056649455","QueryResult":"True","TO":"中国电信","Corp":"中国电信","Province":"安徽","City":"池州","AreaCode":"0566","PostCode":"247100","VNO":"","Card":""}
{"Mobile":"15640694239","QueryResult":"True","TO":"中国联通","Corp":"中国联通","Province":"辽宁","City":"锦州","AreaCode":"0416","PostCode":"121000","VNO":"","Card":""}
=========================
|    处理的号码总数==20
|    获取成功的个数==20
|    获取失败的个数==0
=========================
时间: 2024-11-08 19:00:27

调用手机在线API获取手机号码归属地信息的相关文章

调用webservice查询手机号码归属地信息

Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务.在这里我们使用soap协议往webservice发送信息,然后得到webservice服务器返回过来的信息,以此来查询手机号码的归属地信息. Web Services有很多服务提供商,在这里我们使用www.webxml.com.cn的,如图: 点击进去,我们可以看到soap协议定义的内容. 接下来就是编写代码了. package cn.mzba.servic

HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地(转)

HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地 我是应用在微信中,自定义菜单,菜单直接链接到这个HTML5页面,获取当前位置后,页面中定好目的地,这样打开页面后直接进入导航页面 可以省下先发送位置信息后,点确定再出导航,省一步, <!DOCTYPE html> <html lang="zh-cmn-Hans"> <meta charset="UTF-8"> <meta name="viewpor

开源项目成熟度分析工具-利用github api获取代码库的信息

1.github api github api是http形式的api,功能还是比较丰富的,博主因为项目的原因主要用到的是提取project信息这项功能,返回的数据是JSON格式. api页:https://developer.github.com/v3/ Options: (H) means HTTP/HTTPS only, (F) means FTP only --anyauth Pick "any" authentication method (H) -a, --append Ap

调用百度汇率api 获取各国的汇率值

设置一个定时任务,每天更新汇率java代码如下 package com.thinkgem.jeesite.modules.huiLvApi.service; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Date;

淘宝(新浪)API获取IP地址位置信息

1 package com.parse; 2 3 import java.io.BufferedReader; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.UnsupportedEncodingException; 8 import java.net.HttpURLConnection; 9 import

C++通过WIN32 API获取逻辑磁盘详细信息

1 #include <iostream> 2 #include <windows.h> 3 using namespace std; 4 5 int main() 6 { 7 int DiskCount = 0; 8 DWORD DiskInfo = GetLogicalDrives(); 9 //利用GetLogicalDrives()函数可以获取系统中逻辑驱动器的数量,函数返回的是一个32位无符号整型数据. 10 while(DiskInfo)//通过循环操作查看每一位数据是

黄聪:PHP 免费获取手机号码归属地(转)

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

调用阿里云api获取阿里云数据同步服务(DTS)并且作图发送邮件的整个流程

前言 在https://rorschachchan.github.io/2018/02/24/阿里云获取DTS服务延迟的脚本/ 文章里已经写过,领导现在要求"每天查看阿里云dts同步的延迟情况和同步速率情况",并且在https://rorschachchan.github.io/2018/02/27/使用matplotlib画图的一个脚本/ 里面也放了一个使用python matplotlib画图的demo,这篇文章的目的就是把整个过程实现,并且把dts图形以每日邮件的形式发送给领导的

Linux下的C程序如何调用系统命令,并获取系统的输出信息到C程序中

直接贴代码: #include <stdio.h> #include <string.h> #include <errno.h> int main(int argc,char*argv[]) { FILE *fstream=NULL; char buff[1024]; memset(buff,0,sizeof(buff)); if(NULL==(fstream=popen("uname -a","r"))) { fprintf(s