Java调用第三方接口通过手机号码查询运营商和归属地

import com.alibaba.fastjson.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description:运营商和归属地查询
 * @Author:ghw
 * @Date:2018/8/29
 **/
public class OperatorQuery {

    public static Map<String, String> interfaceUtil(String phone) {
        StringBuilder r = new StringBuilder();
        try {
            //淘宝URL
//            URL url = new URL("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel="+phone);
            //360URL
            URL url = new URL("https://cx.shouji.360.cn/phonearea.php?number="+phone);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            PrintWriter out = null;
            conn.setRequestProperty("accept", "*/*");
            conn.setDoOutput(true);
            out = new PrintWriter(conn.getOutputStream());
            out.flush();
            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is,"gb2312"));
            String result = "";
            while ((result = br.readLine()) != null) {
                r.append(result);
            }
            is.close();
            conn.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }


        //淘宝返回结果处理
//        r = r.replaceAll("__GetZoneResult_ = ", "");
//        JSONObject jsonObject = JSONObject.parseObject(r);
//        String catName = jsonObject.get("catName").toString();
//        String carrier = jsonObject.get("carrier").toString();
//        Map<String,String> map = new HashMap<>();
//        map.put("location",catName);
//        map.put("operator",carrier);
//        return map;



        //360返回结果处理
        JSONObject resultObj = JSONObject.parseObject(r.toString());
        JSONObject data = (JSONObject) resultObj.get("data");
        Map<String,String> map = new HashMap<>();
        String province;
        String city;
        String sp;
        try {
            province = data.get("province").toString();
            city = data.get("city").toString();
            sp = data.get("sp").toString();
        }catch (NullPointerException e){
            province = "";
            city = "";
            sp = "";
        }
        map.put("location",province+city);
        map.put("operator",sp);

        return map;
    }


    public static void main(String[] args) throws Exception{
        Map<String, String> map = interfaceUtil("18888888888");
        String location = map.get("location");
        String operator = map.get("operator");
        System.out.println("location:"+location+"\noperator:"+operator);
    }


    /**
     * 360返回来的中文为unicode,需要转换
     */
    private static String ascii2native ( String asciicode )
    {
        String[] asciis = asciicode.split ("\\\\u");
        String nativeValue = asciis[0];
        try
        {
            for ( int i = 1; i < asciis.length; i++ )
            {
                String code = asciis[i];
                nativeValue += (char) Integer.parseInt (code.substring (0, 4), 16);
                if (code.length () > 4)
                {
                    nativeValue += code.substring (4, code.length ());
                }
            }
        }
        catch (NumberFormatException e)
        {
            return asciicode;
        }
        return nativeValue;
    }
}

淘宝和360接口返回来的数据大同小异,淘宝返回来的数据如果需要转成Json格式需要先进行处理,360返回来的数据中的中文则会显示为对应的Unicode值,需要调用方法将其转换为中文,ascii2native 这个方法不用做任何修改。两种接口根据自身情况自行处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值