利用第三方API服务实现归属地查询

采用Python调用免费归属地查询API 何谓免费归属地查询API?免费归属地查询API指的是通过程序化方式,将电话号码、IP地址等标识符与其所处地域关联起来的技术手段。此项功能有助于识别一个号码或地址的出处,如所在国家、地区、城市或服务提供商等。大多数此类查询API均为免费或低价,可作为API服务的附加功能。免费归属地查询API有哪些种类? 阅读详情

        许多平台诸如阿里、百度等都对外提供了一些付费的API服务,使用这些服务能够大量节省开发成本。在这里我将实现利用来电归属地API服务实现归属地查询。

        首先新建一个Android项目,并创建一个Activity。

        该Activity中包含一个搜索框(使用EditText),一个按钮(Button)和一个查询结果的文本框(TextView)。页面设计代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.amia.telquery.MainActivity">

    <RelativeLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:id="@+id/telnum"
            android:textAlignment="center"<!--设置文字居中-->
            android:inputType="number"<!--输入类型设置为数字-->
            android:background="#ffffff"<!--背景颜色-->
            android:hint="要查询的电话号码"<!--提示文本-->
            android:layout_width="match_parent"
            android:layout_height="50dp" />
        <Button
            android:id="@+id/submit"
            android:background="@drawable/searchbutton"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentRight="true" />
    </RelativeLayout>

    <TextView
        android:id="@+id/result"
        android:textSize="15dp"
        android:paddingTop="20dp"<!--顶部的距离-->
        android:lineSpacingMultiplier="2.0"<!--设置行距倍数-->
        android:lineSpacingExtra="6dp"<!--设置行距大小-->
        android:textAlignment="center"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

         实现的效果如下:


        MainActivity中声明组件:

private EditText telnum;
private Button submit;
private TextView resultView;

        MainActivity的onCreate方法中找到对应的组件:

telnum=(EditText)findViewById(R.id.telnum);
submit=(Button)findViewById(R.id.submit);
resultView=(TextView)findViewById(R.id.result);

        定义归属地结果类:

public class TelType {
    private String prov;//省份
    private String num;//号段
    private String areaCode;//区号
    private String name;//运营商名称
    private String postCode;//邮编3
    private String provCode;//此地区身份证开头几位
    private int type;////1移动    2电信    3联通
    private String city;
    

    public String getProv() {
        return prov;
    }

    public void setProv(String prov) {
        this.prov = prov;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getAreaCode() {
        return areaCode;
    }

    public void setAreaCode(String areaCode) {
        this.areaCode = areaCode;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPostCode() {
        return postCode;
    }

    public void setPostCode(String postCode) {
        this.postCode = postCode;
    }

    public String getProvCode() {
        return provCode;
    }

    public void setProvCode(String provCode) {
        this.provCode = provCode;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }


}

        新建一个java类,命名为QueryTelAddress。定义自己申请的host、path、appcode:

private String host="***** ";
private String path="***";
private String method="GET ";
private String appcode="*******";

        headers和query的定义:

private Map<String,String> headers=new HashMap<>();
private Map<String,String> querys=new HashMap<>();

        单例模式获得该对象:

public static QueryTelAddress getQueryTelAddress() {
    return queryTelAddress;
}

private static QueryTelAddress queryTelAddress=new QueryTelAddress();
        构造方法私有:
private QueryTelAddress(){
    headers.put("Authorization","APPCODE "+appcode);
}
        生成链接,这个方法引用了 https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java这里的代码(如有侵权请私信联系本人,感谢):
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {
    StringBuilder sbUrl = new StringBuilder();
    sbUrl.append(host);
    if (!StringUtils.isBlank(path)) {
        sbUrl.append(path);
    }
    if (null != querys) {
        StringBuilder sbQuery = new StringBuilder();
        for (Map.Entry<String, String> query : querys.entrySet()) {
            if (0 < sbQuery.length()) {
                sbQuery.append("&");
            }
            if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
                sbQuery.append(query.getValue());
            }
            if (!StringUtils.isBlank(query.getKey())) {
                sbQuery.append(query.getKey());
                if (!StringUtils.isBlank(query.getValue())) {
                    sbQuery.append("=");
                    sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
                }
            }
        }
        if (0 < sbQuery.length()) {
            sbUrl.append("?").append(sbQuery);
        }
    }
    return sbUrl.toString();
}

        查询:

public TelType query(String num){
    HttpClient httpClient=new DefaultHttpClient();
    TelType telType=null;
    String result="";
    HttpGet httpRequest=null;
    HttpResponse httpResponse;
    querys.put("num",num);
    try{
        String target =buildUrl(host,path,querys);//创建连接
        httpRequest=new HttpGet(target);
        httpRequest.setHeader("Authorization",headers.get("Authorization"));
        httpResponse=httpClient.execute(httpRequest);
        if(httpResponse.getStatusLine().getStatusCode()== HttpStatus.SC_OK){
            result= EntityUtils.toString(httpResponse.getEntity());//获取放回的字符串
            Log.e("result",result);
            telType=resolveJSON(result);//将返回的JSON数据解析
        }
    }
    catch(ClientProtocolException e){
        e.printStackTrace();
    }
    catch (IOException e){
        e.printStackTrace();
    }
    return telType;
}
        解析JSON数据并生成java bean对象:
private TelType resolveJSON(String result){
    TelType telType=null;
    try {
        JSONObject jsonObject = new JSONObject(result);

        int res_code=jsonObject.getInt("showapi_res_code");//获取结果状态代码,参数请查询申请API的KEY
        if(res_code==0){
            telType=new TelType();
            JSONObject telQueryResult=jsonObject.getJSONObject("showapi_res_body");//获得JSON对象,参数请查询你申请的API的KEY
            HashMap<String,Object> res=changeToHash(telQueryResult);//将JSON对象中的字段转存到哈希表中
            telType=changtoTelType(res);//转换为javabean对象
        }
    }
    catch (JSONException e){
        e.printStackTrace();
    }
    return telType;
}

        将JSON对象的数据转存到哈希表中,参考了@战国剑 的Android解析——json解析为javabean(http://blog.youkuaiyun.com/yangzhaomuma/article/details/50995094,如有侵权请私信本人,感谢):

private HashMap<String,Object> changeToHash(JSONObject jsonObject){
    HashMap<String,Object> result=new HashMap<>();
    Iterator it=jsonObject.keys();
    try {
        while (it.hasNext()) {
            String key = String.valueOf(it.next());
            Object values = jsonObject.get(key);
            result.put(key,values);
        }
    }
    catch (JSONException e){
        e.printStackTrace();
    }
    return result;
}

        转换为java bean对象:

private TelType changtoTelType(HashMap<String,Object> res){
    /*
    参数请查询你申请的API的KEY
     */
    TelType telType=new TelType();
    telType.setProv(res.get("prov").toString());
    telType.setNum(res.get("num").toString());
    telType.setAreaCode(res.get("areaCode").toString());
    telType.setName(res.get("name").toString());
    telType.setPostCode(res.get("postCode").toString());
    telType.setProvCode(res.get("provCode").toString());
    telType.setType(Integer.parseInt(res.get("type").toString()));
    telType.setCity(res.get("city").toString());
    return telType;
}

        在MainActivity的onCreate()方法中为submit按钮添加监听事件:

submit.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        resultView.setText("");
        new Thread(new Runnable() {
            @Override
            public void run() {
                String tel=telnum.getText().toString();
                result=query.query(tel);
                Message m=handler.obtainMessage();
                handler.sendMessage(m);
            }
        }).start();
    }
});
        创建Handle对象:
private Handler handler=new Handler(){
    public void handleMessage(Message msg){
        if(result!=null){
            resultView.setText(String.valueOf("省份:"+result.getProv()+"\n"
            +"所在城市:"+result.getCity()+"\n"+"运营商:"+result.getName()+"\n"
            +"邮政编码:"+result.getPostCode()));
        }
        else{
            //错误提示对话框
            AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("查询失败!");
            builder.setMessage("未能查询到该号码信息,请检查号码是否正确或者网络连接是否正常!");
            builder.setPositiveButton("确定",null);
            builder.show();
        }
        super.handleMessage(msg);
    }
};

        最终实现结果:


免费IP归属地查询API接口 百度IP地址归属地查询接口: 请求接口:http://opendata.baidu.com/api.php?apiquery=123.123.123.123&co=&resource_id=6006&oe=utf8返回结果包括国家、省份、城市等信息。 太平洋IP地址归属地查询接口: 请求接口:http://whois.pconline.com.cn/ipJson.jsp?ip=123.123.123.123&json=true返回结果包括国家、省份、城市等信息。此外,如 阅读详情

相关推荐

手机号归属地查询-运营商归属地查询-手机号归属地信息-运营商手机号归属地查询接口-手机号归属地

手机号归属地查询接口是一种网络服务接口,它允许开发者通过编程方式查询手机号码的注册地信息。这种接口通常由第三方服务提供商提供,并可通过HTTP请求进行调用。

解决API接口开发的博客 2031

JavaScript学习:利用第三方接口做手机归属地查询

逆战学习 整理一下关于怎么获取接口数据,然后渲染数据到页面上 第三方接口地址:手机归属地查询 一、思路和大致需要用到的知识点 1.body标签里准备一个input和button,用一个盒子包起来,一个无序列表先放着来存待会获取的数据 2.输入框提示输入11位手机号码 ,用正则表达式判断是否位正确的号码—用到onfocus onblur oninput 事件 2.点击button把input的值传给...

weixin_45131389的博客 1239

【幂简集成】手机归属地查询API,精准获取号码所在地,提升数据准确率

幂简集成(Explinks.com)发现,手机号归属地查询 api是一种基于互联网的服务,通过提供手机号,可以查询到该号码的归属地信息。归属地通常包括国家、省份、城市等详细地理信息。这类手机号归属地查询 api通常被用于用户注册、数据分析、以及市场营销等场景,以帮助企业做出更明智的决策。

xiaoxincoke的博客 1583

身份证归属地查询接口

身份证归属地查询接口

畅联聚合支付的博客 920

实现IP地址归属地查询API的JavaScript调用

在数字化时代,IP地址不仅是网络连接的标识,更是连接人与地理位置的重要桥梁。IP地址归属地查询API(应用程序编程接口)就是这样一个工具,它可以帮助开发者快速获取IP地址对应的城市、地区甚至经纬度等详细信息。这类API通常由第三方服务提供商维护,通过发送网络请求,开发者能够将IP地址转化为可读的地理数据,从而广泛应用于网站安全验证、流量分析、内容个性化定制等多种场景中。

weixin_42348783的博客 967

百度API手机号码归属地查询demo

利用百度api进行手机号码归属地查询,可以运行 。

第三方免费开放API 获取用户IP 并查询其地理位置

需求:有一个项目是微信公众号,属于汽车服务。当车主在填写车主资料或者车辆认证时,需要填写车牌号或者车架号;车牌号需要选择省,为了方便用户操作,所以想自动定位默认省,如下图: 我查询了一些博客,找到了一些方法,经过测试,记录一下还能用的。 方法一:搜狐API 有时候cname这个字段返回的不是省市,因为在2/3/4G网络时,定位失败,但是IP还是可以用的,亦可以配合第二种方法使用。 ...

若末lan的博客 4494

IMU、INS、GNSS与组合导航:从原理到工程实践全解析

在自动驾驶、无人机和机器人等智能系统的定位方案中,IMU、INS、GNSS和组合导航常被混为一谈,但它们在硬件层级、数据特性和误差机制上截然不同。IMU作为惯性测量单元,以百赫兹以上频率输出加速度和角速度;INS基于IMU完成姿态、速度与位置的递推解算,却因积分累积误差而随时间漂移;GNSS提供绝对位置,但易受遮挡和干扰。组合导航通过卡尔曼滤波将两者融合,实现短期不飘、长期不偏的连续定位,这正是高精度导航系统的技术底座。工程落地时,从IMU标定、Allan方差分析到相机/LiDAR与IMU外参标定,再到松耦

weixin_29193259的博客 383

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

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

anxi2091的博客 1417

F280049C_HRPWM_死区时间高精度控制与MEP技术实战解析

本文深入解析了F280049C的HRPWM模块及其基于MEP技术的死区时间高精度控制。通过实测数据与TI官方代码对比,详细阐述了DBREDHR和DBFEDHR寄存器的配置技巧、精度优化方法及常见问题调试,为电源管理和电机控制应用提供了实用的实战指南。

yolo5detector的博客 217

Cesium中GLB模型加载

Cesium中GLB模型加载全解析:Primitive与Entities方法详解

m0_72030584的博客 3472

推荐一个免费精确的号码归属地查询接口

http://mobsec-dianhua.baidu.com/dianhua_api/open/location?tel=17001111234 是百度开放出来的归属地查询接口,比各个api商店里面的要准确很多,能识别虚拟运营商。 对比了一下360和sogou搜索的结果,感觉应该都是接入了运营商的数据。 测试了一下,应该也没限制请求量。   该接口 360 sog

whyuds的博客 1万+

C#连接数据库报Authentication to host ‘127.0.0.1‘ for user ‘root‘ using method ‘caching_sha2_password‘ fail

所以导致的,除了上边的办法,还可以把这个加密规则修改一下,这个的修改方式有很多,具体原因是因为MySQL8.0以前的加密规则是。

weixin_42209881的博客 4128

【java】利用第三方的IP地址属地查询

任务是根据IP地质查询所述的省份,可以运用第三方的工具。 网上搜了一下,采用了网上的现成代码并进行了修改:返回的参数封装成了DTO,包含所属国家、地区、省份、城市、互联网服务提供商。 放到同一个pakage里,运行Test.java或参照Test.java调用即可。 ++++GetAddressByIp类++++++++++++++++++++++++++++++++

LuoTianyan的博客 1049

OpenWRT使用4G/5G无线网卡模块上网

将4G/5G开发板插入设备,终端输入lsusb或lspci,看设备是否识别到4G/5G模块。

1万+

【Flutter 问题系列第 16 篇】如何防止软键盘弹出后顶掉内容

Flutter 如何防止软键盘弹出后顶掉内容

“Allen Su”的博客 3317

php实现身份证号码获取归属地地址的实例

什么是接口(interface) ? 接口是方法的抽象,如果不同的类有同样的方法,那么就应该考虑使用接口。 (1)接口是一个行为的规范、协议。其实就是类和类之间的一种协定,一种约束 (2)C#不支持多继承,但是他把这个功能交给接口来实现。 (3)类与类之间的系统资源调用方式不一样,导致他们之间的通信很困难,而接口可以屏蔽掉它们之间的差异,能使他们顺利通信。 https://www.nowapi.com/api/idcard.get在连接中寻找身份证号码归属地查询接口 身份证查询接口: ...

code_nutter的博客 1623

基于QT与STM32的电力参数采集系统(华为云IOT)(211)

本项目构建一款集多功能于一体的电力参数采集系统,该系统以高性能、低功耗的STM32F103RCT6微控制器为核心,集成多种传感器与通信模块,实现对电力设施如电压、电流、功率、电能及环境温度等关键参数的实时精确采集,并通过GPS模块获取设备地理位置信息,满足了电力设备状态全面监控的需求。

2903

免费常用IP归属地查询API

文章目录1. ip-api.com ,可切换显示语言2. 百度3. 太平洋4. 126 记录几个免费的IP地址归属地查询的接口,其实这些IP归属地的查询,实现起来也不难,主要是要有一个IP库文件就能实现,以后有空自己实现一下。 1. ip-api.com ,可切换显示语言 http://ip-api.com/json/117.136.12.79?lang=zh-CN { "status": "success", "country": "中国", "countryCode": "CN"

Lenjor 的博客 4万+

2025_NIPS_Truthful Aggregation of LLMs with an Application to Online Advertising

大型语言模型(LLMs)生成内容的 revenue 变现是在线广告的下一个前沿领域。我们考虑这样一种场景:广告商旨在影响LLM的回复,而平台则寻求最大化广告商价值并确保用户满意度。核心挑战在于,广告商的偏好通常与用户偏好存在冲突,且广告商可能误报其偏好。为解决这一问题,我们提出MOSAIC——一种拍卖机制,它确保真实申报是广告商的占优策略,并使每个广告商的效用与其对社会福利的贡献保持一致。重要的是,该机制无需LLM微调或访问模型权重,且随着计算资源的增加,可证明收敛到最优微调LLM的输出。

c_cpp_csharp的专栏 82

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

调用阿里API实现手机号归属地查询

翟鹏超,男,西安工程大学电子信息学院,2022级研究生研究方向:输电线路导线覆冰状态监测电子邮件:zhaipc0710@qq.com张思怡,女,西安工程大学电子信息学院,2022级研究生,张宏伟人工智能课题组研究方向:机器视觉与人工智能电子邮件:981664791@qq.com。

ZHW-鲜橙大AI课题组的博客 5245

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

利用百度API查询手机号归属地

利用百度Api查询手机号归属地先到百度API官网查看其有关说明,这是其官网:http://apistore.baidu.com/ 可在此页面找到相关说明。打开网址可以看到好几个号码归属地的查询,有些是收费的,有些免费,如果调用不是特别频繁,需要的信息量不是特别多的话,免费的就足够了。我开始看的是第一个接口:http://apistore.baidu.com/apiworks/servicedeta

wbjylk的博客 5万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

手机归属地查询Api接口,数据准确可靠

API全称为Application Programming Interface,即应用程序接口,是软件系统之间相互通信的一种约定。API接口可以让不同的软件系统之间实现数据的传输和交互,使得系统之间的集成更加方便和高效。手机归属地查询API接口就是一种提供手机归属地信息查询功能的接口,通过向接口发送请求并传递相应的参数,我们可以获取到手机号码对应的归属地、区号、邮政编码等信息。手机归属地查询API接口为我们提供了一种快速、准确获取手机号码归属地信息的方式。

挖数据API接口的博客 1196

IP归属地查询API详解

在互联网时代,IP地址不仅是网络设备的唯一标识,更是连接虚拟世界与现实世界的桥梁。IP归属地查询API(应用程序编程接口)便是利用IP地址的这一特性,为用户提供准确、快速的地理位置信息。

海碗吃饭的博客 1287

阿里云接口手机归属地查询API

首先点击阿里云API接口获取相应的订单后在控制台中可以得到您的appcode;package com.ningze.rest.cxb; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.inject.Singleton; import javax.ws.rs.GET;...

ROCK 7430

免费IP归属地查询API接口分享

为了解决这个问题,我在这里分享了一些免费的IP地址归属地查询API接口,供您参考和使用。这些接口可以帮助您查询指定IP的位置信息,仅供参考。返回结果包括国家、省份、城市等信息。此外,如果IP地址为空,接口还可以根据网络定位返回设备位置信息。返回结果包括国家、省份、城市等信息。返回结果包括国家、省份、城市等信息。返回结果包括国家、省份、城市等信息。返回结果包括国家、省份、城市等信息。返回结果包括国家、省份、城市等信息。返回结果包括国家、省份、城市等信息。返回结果包括国家、省份、城市等信息。

春枫 7101
上一篇: Intent的简单介绍
下一篇: Android广播的简单使用
ZGUIZ
博客等级 码龄10年 106粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值