shell调用api store查询手机号码归属地

来源:互联网 发布:台湾学生 知乎 编辑:程序博客网 时间:2024/06/13 08:41

一、api store简介


api store是属于一个API聚合平台,可以向外提供各种的数据服务,比较有代表性的有dev store,百度api store和聚合数据等等,这类服务通过向外提供rest api接口来暴露给第三方的开发者。
api store提供了很多类型的数据服务,有生活常用,应用开发,金融理财,旅游票务等等api,但是有些接口是有收费的,同时也提供了很多免费的接口,这里就用手机号码归属地查询作为一个demo来做api的调用展示。

二、shell对rest接口的支持


在处理restful api这块,一直是java的强项,特别是近年来流行的spring boot框架,微服务的理念已成为流行的趋势。这里介绍用更轻量级的shell来调用api接口,同时温习一下shell的脚本吧。
shell处理restful api时,shell支持curl命令,curl命令对http模拟发送http请求提供很良好的支持。同时在处理json数据这块,shell提供了jq工具,对json进行了很好的解释支持。

三、代码实现思路


1. 手机号码归属地的api

本文的调用的api来自于百度api store,其官方公布的api接口如下:

curl --get --include'http://apis.baidu.com/apistore/mobilenumber/mobilenumber?phone=15210011578' -H 'apikey:您的apikey'

2.JSON返回示例 :

{"errNum": 0,"retMsg": "success","retData": {"phone": "15210011578","prefix": "1521001","supplier": "移动 ","province": "北京 ","city": "北京 ","suit": "152卡"}}

3.返回结果json的解析

(1) jq的安装和使用:

mac的安装命令:brew install jq
CentOS or Ubuntu安装命令:
apt-get -qq -y install jq || yum -y install jq

(2) jsonStr代表以上的json返回示例。
echo $jsonStr | jq '.' #格式化json并校验json字符串是否合法
(3) 提取json的字段值
echo $jsonStr | jq '.retMsg' #取得返回的retMsgecho $jsonStr | jq '.retData' | jq '.phone' #取得返回的phone

四、源码示例

#!/bin/bash#author:zhengsc#describe:查询服务#查询手机号归属地#变量定义APIKEY=7531365f3dc9873af649bce596aacb92 #apikeyRESTAPI_PHONE='http://apis.baidu.com/apistore/mobilenumber/mobilenumber?phone=' #调用api的查询地址PHONEPATTERN='^1[34578][0-9]{9}$' #手机号正则表达式校验EXIT='^[a-z|A-Z]*$'#菜单showMenu(){read -p "******************************************        mobile number query tool       **        author:zhengsc                 **        date:2016-09-23                **        exit: a-z                      ******************************************请输入您的手机号码:" phone}#调用接口查询#附json结果返回的格式#{#  "errNum": 0,#  "retMsg": "success",#  "retData": {#    "phone": "15270864042",#    "prefix": "1527086",#    "supplier": "移动",#    "province": "江西",#    "city": "南昌",#    "suit": "152卡"#  }#}phoneQuery(){json=$(curl -s --get  "$RESTAPI_PHONE${phone}"  -H "apikey:${APIKEY}")#echo "${json}" | jq '.'parseJson ${json}}#json解释parseJson(){jsonStr=$1retMsg=$(echo ${jsonStr} | jq '.retMsg') #返回码if [ "${retMsg}" = '"success"' ]; thenprovince=$(echo ${jsonStr} | jq '.retData' | jq '.province') #省city=$(echo ${jsonStr} | jq '.retData' | jq '.city') #市supplier=$(echo ${jsonStr} | jq '.retData' | jq '.supplier') #运营商suit=$(echo ${jsonStr} | jq '.retData' | jq '.suit') #电话卡类型echo "归属地查询结果:${province}${city}${supplier}${suit}"elseecho "查询失败!"fi}installjq(){ if [[ ! `which jq` ]]; then  echo "您的系统没有安装jq工具,请先安装jq工具! "  # adaptive for CentOS or Ubuntu  apt-get -qq -y install jq || yum -y install jq  [ $? -ne 0 ] && echo "jq工具安装失败! ";echo "jq工具安装成功! "  echo "$(which jq) 已经找到!"fi}#主函数main(){installjq #安装jq工具showMenu #调用菜单函数if [[ "${phone}" =~ $EXIT ]]; thenecho "您已退出查询工具,谢谢使用"exit #按任意字母键退出查询工具fiif [[ "${phone}" =~ $PHONEPATTERN ]]; thenphoneQuery ${phone}elseecho "您输入的手机号码格式不正确"showMenufi}#主函数调用main

五、运行截图

运行调试返回的json报文
手机号归属地查询的结果
这里写图片描述
查询失败的结果
输入参数不正确和退出的方式

0 0
原创粉丝点击