phone-service

4.0.6 • Public • Published

通过手机号查询运营商以及号码归属地

Build Status via Travis CI Coverage Status NPM version

在很多行业很多项目,比如电商,比如金融,比如O2O等,在用户注册这一块会经常用到手机号。如何判断一个手机号是否存在?在特殊产品需求条件下,我们需要区分用户的运营商(移动、联通、电信),甚至区分用户省份,乃至城市,来方便产品,运营同学对用户进行地区化,个性化服务。为了解决这样的业务、产品需求,就动手写了这个模块。

安装:npm install phone-service

API

插件编写

工具函数

util

API使用例子

可选参数option说明

/**
*option = > {
    parallel:2,//插件通道并发请求数,默认是2,当为0时使用最大(所有可用插件)并发数同时发起查询请求。
    timeout:null,//响应超时时间
    model:0,//获取手机号码信息模式,目前支持3种:0->只获取手机号运营商,1->获取手机号运营商以及省份,2->获取手机号运营商、省份以及城市(地级市)
    plugins:[]//指定使用哪些插件通道(当某些通道出问题时,用户可以指定只用这些通道)
}
*/

查询手机号运营商

var phoneService = require('phone-service');
var option = {};
phoneService.query(15900000000,option,function(err,data){
    //data=>{supplier:"中国移动",phone:15900000000,abbreviation:'China_Mobile'}
});
 
// promise
phoneService.query(15900000000,option)
    .then(function (data) {
        //data=>{supplier:"中国移动",phone:15900000000,abbreviation:'China_Mobile'}
    })

查询手机号运营商以及省份

var phoneService = require('phone-service');
var option = {model:1};
phoneService.query(15900000000,option,function(err,data){
    //data=>{supplier:"中国移动",province:'广东',phone:15900000000,abbreviation:'China_Mobile'}
});

查询手机号运营商、省份以及城市(地级市)

var phoneService = require('phone-service');
var option = {model:2};
phoneService.query(15900000000,option,function(err,data){
    //data=>{supplier:"中国移动",province:'广东',city:'中山',phone:15900000000,abbreviation:'China_Mobile'}
});
var phoneService = require('phone-service');
phoneService.isPhone(15900000000) === true
var phoneService = require('phone-service');
phoneService.isChinaMobile(15900000000) === true
var phoneService = require('phone-service');
phoneService.isChinaTelecom(15900000000) === false;
var phoneService = require('phone-service');
phoneService.isChinaUnicom(15900000000) === false;

插件编写(高级功能)

插件扩展开发

如果模块自带的插件不满足或者被插件对应的平台屏蔽了,使用者可以自己开发插件来完成工作。

//插件开发 demo
var phoneService = require('phone-service');
var util = phoneService.util;
var plugin = phoneService.plugin;//插件对象
var pluginMock = {
    name:'navy',//插件名字
    parse:function(phone,cb){
        //数据解析,返回json.当所编写的插件:
        //1.只返回手机号服务商(即插件的model定义为0)时,返回的对象中必须包含key:util.getSupplierKey()
        //2.返回手机号服务商和归属省份(即插件的model定义为1)时,返回的对象中必须包含key:util.getSupplierKey(),util.getProvinceKey()
        //3.返回手机号服务商和归属省份以及归属城市(即插件的model定义为2)时,返回的对象中必须包含key:util.getSupplierKey(),util.getProvinceKey(),util.getCityKey()
        var result = {};
        result[util.getSupplierKey()] = '移动';
        result[util.getProvinceKey()] = '广东';
        result[util.getCityKey()] = '广州';
        cb(null,result);
    }
    model:2,//model可取值:0,1,2,说明请看上面parse函数
    url:function(phone){
        return 'http://xxxx.com?phone='+phone;//返回请求的url
    },
    option:{
        //node request module request method param.
        headers:{"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/41.0.2272.76 Chrome/41.0.2272.76 Safari/537.36"},
        encoding:null
    }
};
plugin.add(pluginMock);//注册插件
plugin.check('navy',function(err,data){
    if(!err){
        //plugin is ok;
    }
})
//使用刚才注册的插件
phoneService.query(15900000000,{plugins:['navy']},function(err,data){
    //todo
})

当模块自带的插件或者使用者自己开发的插件出问题时(比如被插件对应的平台屏蔽),这时候在调用api前可以卸载有问题的模块

plugin.delete('navy');//卸载自己写的插件
plugin.delete('360');//卸载模块自带的插件
//调用query方式时将不再使用360插件了
phoneService.query(15900000000,function(err,data){
    //todo
})

工具对象

var phoneService = require('phone-service');
phoneService.util.getSupplierKey();//获取服务商返回的key
phoneService.util.getProvinceKey();//获取省份返回的key
phoneService.util.getCityKey();//获取城市(地级市)返回的key

test

//test
npm test
//code coverage
//npm run cov

code coverage

=============================== Coverage summary ===============================
Statements   : 87.41% ( 354/405 )
Branches     : 80.83% ( 156/193 )
Functions    : 95.95% ( 71/74 )
Lines        : 87.41% ( 354/405 )
================================================================================

发布logs

  • 4.0.0 query api 支持promise方式调用
  • 3.0.1 添加parallel参数为0时开启最大(当前支持插件)并发数同时发起查询请求
  • 3.0.0 修复重大的bug,plugin下try catch 没有return。建议立马升级至3.0.0。

Package Sidebar

Install

npm i phone-service

Weekly Downloads

21

Version

4.0.6

License

ISC

Last publish

Collaborators

  • navyxie