Git Product home page Git Product logo

phone-service's Introduction

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

Build Status via Travis CI Coverage Status NPM version

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

安装:npm install phone-service

工具函数

util

[query]: 查询手机号详细信息, 异步函数

可选参数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
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。

phone-service's People

Contributors

navyxie avatar bigwin-book avatar no7dw avatar

Stargazers

 avatar  avatar Awetavar avatar  avatar  avatar pl125 avatar baikaishui avatar Lloyd Zhou avatar 詹丹 avatar  avatar liuguojun avatar 张成 avatar zhaixl avatar  avatar salex avatar phris avatar 阮家友 avatar  avatar CodesRare avatar Chang yukai avatar 里丰 avatar 邓凯 avatar SoMustYY avatar Max You avatar daben1990 avatar  avatar Ethan Lin avatar HaveF avatar  avatar Ertao avatar SIQI WU avatar  avatar Peter avatar yakumo17s avatar noxx avatar  avatar  avatar  avatar junia avatar Jay Chang avatar salgee avatar  avatar Mr.Hao avatar xxz avatar jefurry avatar SpongeBob avatar VINO avatar  avatar Loger avatar  avatar 陈亦 avatar Ray Yee avatar peterChealse avatar jKey Lu avatar BelinChung avatar Xi avatar JerryC avatar juju avatar 李小义 avatar  avatar  avatar wolfg avatar Ady Liu avatar  avatar Jonir Rings avatar 沧浪 avatar P.H.W avatar liyifei avatar Le.Beta avatar  avatar Jasonzza avatar 一米 avatar Li Yi avatar

Watchers

James Cloos avatar  avatar  avatar aGolduck avatar 沧浪 avatar  avatar  avatar Z Ray avatar zhaixl avatar 詹丹 avatar

phone-service's Issues

携号转网

国家推行携号转网后,项目是否意义不大了?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.