Greasy Fork

查询手机号归属地

选中符合手机号规则的网页内容进行查询,若不符合规则则不进行查询

// ==UserScript==
// @name         查询手机号归属地
// @version      1.0.1
// @namespace    https://github.com/tangfei/tampermonkey_phone_location
// @description  选中符合手机号规则的网页内容进行查询,若不符合规则则不进行查询
// @icon         data:image/jpg;base64,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
// @author       Tom Tang
// @grant        GM_xmlhttpRequest
// @license      MIT
// @match        *://*/*
// @require        https://code.jquery.com/jquery-latest.js
// ==/UserScript==

(function () {
  'use strict';

  /**
   * 字符串模板格式化
   * StringFormat("ab{0}c{1}ed",1,"q")  output "ab1cqed"
   */
  function StringFormat(formatStr) {
      var args = arguments;
      return formatStr.replace(/\{(\d+)\}/g, function (m, i) {
          i = parseInt(i);
          return args[i + 1];
      });
  }

  function DateFormat(date, formatStr) {
    var o = {
      "M+": date.getMonth() + 1, //月份
      "d+": date.getDate(), //日
      "h+": date.getHours(), //小时
      "m+": date.getMinutes(), //分
      "s+": date.getSeconds(), //秒
      "q+": Math.floor((date.getMonth() + 3) / 3), //季度
      "S": date.getMilliseconds() //毫秒
    };
    if (/(y+)/.test(formatStr)) {
        formatStr = formatStr.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    for (var k in o) {
      if (new RegExp("(" + k + ")").test(formatStr)) {
        formatStr = formatStr.replace(
          RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
      }
    }
    return formatStr;
  }

  function get_location(icon, phone, e){
      var url = 'https://v.showji.com/Locating/showji.com20180331.aspx?m=' + phone +'&output=json';
      GM_xmlhttpRequest({
          method: "GET",
          url: url,
          responseType: 'json',
          onload: function (request) {
              // console.log(request);
              if(request.status != 200){
                  get_location_second(icon, phone, e);
              }else{
                var result_json = request.response;
                var html_string = result_json["Mobile"] + ":" + result_json["Province"] + result_json['City'] + result_json['Corp'];
                $(icon).html(html_string);
                $(icon).show().css({
                    left: e.pageX + 'px',
                    top : e.pageY + 12 + 'px'
                });
                isSelect=false;
                console.log(result_json);
              }
          },
          onerror: function (e) {
              get_location_second(icon, phone, e);
          }
      });
  }

  function get_location_second(icon, phone, e){
      // 使用的淘宝的免费接口
      var url = 'https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=' + phone;
      GM_xmlhttpRequest({
          method: "GET",
          url: url,
          onload: function (request) {
              var data = request.responseText.split("=")[1];
              var result_json = JSON.parse(data.replace(/(\w+):'([^']*)'/g,"\"$1\":\"$2\""));
              var html_string = result_json["telString"] + ":" + result_json["carrier"];
              $(icon).html(html_string);
              $(icon).show().css({
                  left: e.pageX + 'px',
                  top : e.pageY + 12 + 'px'
              });
              isSelect=false;
              console.log(result_json);
          },
          onerror: function (e) {
              console.log('调用淘宝api出错了');
              console.error(e);
          }
      });
  }

  function ClearBubble(e) {
    if (e.stopPropagation) {
        e.stopPropagation();
    } else {
        e.cancelBubble = true;
    }
    if (e.preventDefault) {
        e.preventDefault();
    } else {
        e.returnValue = false;
    }
  }

  var isSelect=false;
  //主程序
  var PhoneLocation=function(){
      var phoneIconBase64="data:image/jpg;base64,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";
      var $doc=$(document);
      var $body=$("html body");
      var $head=$("html head");
      var randomCode="yyMM000000";    //属性随机码,年月加六位随机码。用于元素属性后缀,以防止属性名称重复。
      var createHtml=function(){
        var phoneIconHtml=StringFormat('<div id="phone{0}" class="phone{0}" style="background-color: rgb(245, 245, 245);box-sizing: content-box;cursor: pointer;z-index: 2147483647;border-width: 1px;border-style: solid;border-color: rgb(220, 220, 220);border-image: initial;border-radius: 5px;padding: 0.5px;position: absolute;display: none"><div class="phoneIcon{0}" style="background-size: 125px;height: 25px;width: 125px;"></div></div>',randomCode,phoneIconBase64);
        $body.append(StringFormat('<div id="webTrans{0}">',randomCode)+phoneIconHtml+'</div>');
      };
      var ShowPhoneIcon=function(){
        var icon = "div#phone" + randomCode;
        var $phoneIcon=$(icon);
        var isPanel=false;
        var isphoneIcon=false;
        $doc.on({
          "selectionchange":function(e){
            isSelect=true;
          },
          "mousedown":function(e){
            var $targetEl=$(e.target);
            isPanel=$targetEl.parents().is("div.JPopBox-tip-white");
            isphoneIcon=$targetEl.parents().is(StringFormat("div#phone{0}",randomCode));
            //点击图标外域时,隐藏图标
            if(!isphoneIcon && !isPanel){
              $phoneIcon.hide();
            }
            else {
              if(isphoneIcon){
                ClearBubble(e);
              }
            }
          },
          "mouseup":function(e){
            var selectText = window.getSelection().toString().trim();
            var pattern = /^1[3456789]\d{9}$/;
            if (pattern.test(selectText)){
              if(!isPanel&&isSelect&&selectText){
                  get_location(icon, selectText, e);
              }
            }else{
              // console.log("不是手机号");
            }
          }
        });
        $phoneIcon.click(function(e){
          var selecter=window.getSelection();
          var selectText = selecter.toString().trim();
          $phoneIcon.hide();
        });
    };
    this.init=function(){
      randomCode=DateFormat(new Date(),"yyMM").toString()+(Math.floor(Math.random() * (999999 - 100000 + 1) ) + 100000).toString();
      createHtml();
      ShowPhoneIcon();
    };
  };
  var phone_location = new PhoneLocation();
  phone_location.init();

}());