zoukankan      html  css  js  c++  java
  • 安全卫士分析号码归属地

    前言

    很早之前就看到网上有一个手机安全卫士和手机助手的源码,一直没看看里面的一些实现,今天下载后运行,发现手机卫士其实只是个界面短信公共感觉没实现,有待具体分析,本文将分析手机助手里德号码归属地查询。

    源码传送门:

    git clone git@github.com:avenwu/mobilehelper.git 或

    git clone https://github.com/avenwu/mobilehelper.git

    本文使用到的技术如下:

    正文

    要查归属地我觉得有两种思路,一是本地数据库查询,这个需要你有一个各大运营商手机号段的数据,另一个就是走网络查询,现在网上有很多这种提供号码查询的站点很多,但是会返回许多额外的数据,搜索了下找到两篇文章,内容基本一样,不知道那篇是原创:

    http://blog.sina.com.cn/s/blog_7bac4707010143o2.html

    http://www.cnblogs.com/88223100/archive/2013/03/06/2945474.html

    上面列出的实际上就是一些比较好的干净api,返回的数据简洁明了,主要有xml和json两种格式,

    现在选用https://www.baifubao.com/callback?cmd=1059&callback=phone&phone=13717830629作为查询的api,

    其返回结果如下:


    phone( { meta:{ result: "0", result_info: "", jump_url: "" }, data: { operator: "移动", area: "江苏", area_operator: "江苏移动" } } )


    这个是json格式,但不是完全正确,所以解析时要做一点修改。
      json数据的正确格式是: 

    (1)一个对象以“{”(左括号)开始,“}”(右括号)结束。

    (2)每个“名称”后跟一个“:”(冒号);

    (3)“‘名称/值’ 对”之间使用“,”(逗号)分隔。

    发请求时,只需将参数换为要查询的手机号即可:

    String url = PRE_URL.replace("phoneNumber", editPhonenumber
                            .getText().toString().trim());
                    phoneRequest = new StringRequest(url, new Listener<String>() {
                        @Override
                        public void onResponse(String arg0) {
                            /*
                             * phone( { meta: { result: "0", result_info: "",
                             * jump_url: "" }, data: { operator: "移动", area: "江苏",
                             * area_operator: "江苏移动" } } )
                             */
                            int start = arg0.indexOf("{");
                            int end = arg0.lastIndexOf("}") + 1;
                            JSONObject json = null;
                            try {
                                json = new JSONObject(arg0.substring(start, end));
                                StringBuffer result = new StringBuffer();
                                result.append("手机号:"
                                        + editPhonenumber.getText().toString()
                                                .trim());
                                result.append("\n运营商:"
                                        + json.getJSONObject("data").get(
                                                "area_operator"));
                                tvResult.setText(result.toString());
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }, new ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError arg0) {
                            Toast.makeText(MainActivity.this,
                                    R.string.query_failed, Toast.LENGTH_SHORT)
                                    .show();
                        }
                    });
                    NetManager.queryPhoneNumber(phoneRequest);
  • 相关阅读:
    poj3067 Japan(树状数组)
    Codeforces 482C Game with Strings(dp+概率)
    LeetCode -- 推断链表中是否有环
    螺旋矩阵——正逆序
    POJ 3905 Perfect Election(2-sat)
    设计模式 之 桥接
    Codeforces Round #257 (Div. 2)
    [LeetCode][Java] Minimum Window Substring
    Unity特殊目录和脚本编译顺序
    jQuery插件 -- Cookie插件
  • 原文地址:https://www.cnblogs.com/avenwu/p/3136154.html
Copyright © 2011-2022 走看看