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查询手机号码归属地的主要内容,如果未能解决你的问题,请参考以下文章

调用API接口,查询手机号码归属地

从零开始调用一个手机号归属地查询API

免费手机号码归属地API查询接口

免费手机号码归属地API查询接口

PHP结合阿里云市场Api获取手机归属地视频教程

手机号码归属地查询api接口