shell调用api store查询手机号码归属地
Posted weiker12
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell调用api store查询手机号码归属地相关的知识,希望对你有一定的参考价值。
一、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' #取得返回的retMsg
echo $jsonStr | jq '.retData' | jq '.phone' #取得返回的phone
四、源码示例
#!/bin/bash
#author:zhengsc
#describe:查询服务
#查询手机号归属地
#变量定义
APIKEY=7531365f3dc9873af649bce596aacb92 #apikey
RESTAPI_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=$1
retMsg=$(echo $jsonStr | jq '.retMsg') #返回码
if [ "$retMsg" = '"success"' ]; then
province=$(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"
else
echo "查询失败!"
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 ]]; then
echo "您已退出查询工具,谢谢使用"
exit #按任意字母键退出查询工具
fi
if [[ "$phone" =~ $PHONEPATTERN ]]; then
phoneQuery $phone
else
echo "您输入的手机号码格式不正确"
showMenu
fi
#主函数调用
main
五、运行截图
这里写图片描述
以上是关于shell调用api store查询手机号码归属地的主要内容,如果未能解决你的问题,请参考以下文章