PHP实现查询手机归属地的方法详解


Posted in PHP onApril 28, 2017

本文介绍的是PHP实现查询手机归属地的方法,首先来看看手机归属地查询的类图:

PHP实现查询手机归属地的方法详解

后台

MobileQuery类调用:

  • \libs\HttpRquest
  • \libs\ImRedis (未使用)

Api类调用 MobileQuery 类的 Query 方法来返回 $response 的数据,并进行加工。

前台

base.js 使用 .ajax 请求,并将请求后的数据填充到index.html 中。

核心代码展示

AutoLoad.php

<?php
/**
 * TODO Auto-generated comment.
 */
class AutoLoad {

 /**
  * TODO Auto-generated comment.
  */
  public static function load($className)
 {
  //命名空间的反斜杠替代
  $filename = sprintf('%s.php',str_replace('\\','/',$className));
  require_once($filename);
 }
}
spl_autoload_register(['AutoLoad','load']);

Api.php

<?php
/**
 * TODO Auto-generated comment.
 */
require_once "AutoLoad.php";
use \app\MobileQuery;
class Api{
 private $response;
 private $params;
 private $phone;
 public function __construct(){
  $this->params = $_POST;
  if(isset($this->params['tel'])) {
   $this->phone = $this->params['tel'];
  }else {
   $this->phone = '17706436202';
  }
  $this->queryResponse($this->phone);
 }
 public function queryResponse($phone) {
  $this->response = MobileQuery::query($phone);
  if(is_array($this->response) and isset($this->response['province'])) {
   $this->response['phone'] = $phone;
   $this->response['code'] = 200;
  } else {
   $this->response['phone'] = $phone;
   $this->response['msg'] = '手机号码错误';
  }
 }
 public function getResponse()
 {
  return json_encode($this->response);
 }
}
$Api = new Api();
echo $Api->getResponse();

app/MobileQuery.php

<?php
/**
 * TODO Auto-generated comment.
 */
namespace app;

use libs\HttpRequest;
use libs\ImRedis;

class MobileQuery {
 /**
  * TODO Auto-generated comment.
  */
 const PHONE_API= 'https://tcc.taobao.com/cc/json/mobile_tel_segment.htm';
 /**
  * TODO Auto-generated comment.
  */
 const QUERY_PHONE = 'PHONE:INFO:';

 public static function query($phone)
 {
  $phoneData = null;
  if(self::varifyPhone($phone)){
   $response = HttpRequest::request(self::PHONE_API, ['tel'=>$phone]);
   $phoneData = self::formatData($response);
   $phoneData['msg'] ='数据由Cizel的博客提供';
  }
  return $phoneData;
 }

 public static function formatData($data)
 {
  $ret = null;
  if(!empty($data)){
   preg_match_all("/(\w+):'([^']+)/",$data,$res);
   $items = array_combine($res[1],$res[2]);
   foreach ($items as $itemKey => $itemVal) {
    $ret[$itemKey] = iconv('GB2312','UTF-8',$itemVal);
   }
  }
  return $ret;
 }

 public static function varifyPhone($phone)
 {
  if(preg_match("/^1[34578]{1}\d{9}/",$phone)) {
   return true;
  } else {
   return false;
  }
 }
}

lib/HttpRequest.php

<?php
/**
 * TODO Auto-generated comment.
 */
namespace libs;

class HttpRequest {

 /**
  * TODO Auto-generated comment.
  */
 public static function request($url, $params =[], $method='GET')
 {
  $ret = null;
  if(preg_match("/^(http|https)\:\/\/(\w+\.\w+\.\w+)/",$url)) {
   $method = strtoupper($method);
   if($method == 'POST') {
    exit('nothing to do.');
   } else {
    if($params) {
      if(strripos('?',$url)) {
      $url = $url . '&' . http_build_query($params);
      } else {
      $url = $url . '?' . http_build_query($params);
      }
    }
    $ret = file_get_contents($url);
   }
  }
  return $ret;
 }
}

statis/js/base.js

/*
* @Author: Cizel
* @Date: 2016-04-11 16:53:52
* @Last Modified by: Cizel
* @Last Modified time: 2016-04-11 17:22:32
*/

$(document).ready(function(){
 $('#query').click(function(){
  var phone = $('#phone_num').val();
  //alert(phone);
  if (phone.length == 11) {
   Cizel.GLOBAL.AJAX('Api.php','post',{'tel':phone},'json',Cizel.APPS.QUERYPHONE.AJAXCALLBACK);
  }
 });
 });

var Cizel = Cizel || {};
Cizel.GLOBAL = {};
Cizel.APPS = {};

Cizel.APPS.QUERYPHONE = {};
Cizel.APPS.QUERYPHONE.AJAXCALLBACK = function(data){
 if(data.code == 200){
  Cizel.APPS.QUERYPHONE.SHOWINFO();
  $('#phoneNumber').text(data.phone);
  $('#phoneProvince').text(data.province);
  $('#phoneCatName').text(data.catName);
  $('#phoneMsg').text(data.msg);
 } else {
  Cizel.APPS.QUERYPHONE.HIDEINFO();
 }
};
Cizel.APPS.QUERYPHONE.SHOWINFO = function(){
 $('#phoneInfo').show();
}
Cizel.APPS.QUERYPHONE.HIDEINFO = function(){
 $('#phoneInfo').hide();
}

Cizel.GLOBAL.AJAX = function(url, method, params,dataType,callBack)
{
 $.ajax({
  url: url,
  type: method,
  data: params,
  dataType: dataType,
  success:callBack,
  error:function(){
   alert('请求异常');
  }

 });
};

感悟

通过完成这个实例,感觉自己对 PHP 面向对象的编写有了新的理解,同时 JavaScript 的编写能力需要加强。

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
一段防盗连的PHP代码
Dec 06 PHP
基于python发送邮件的乱码问题的解决办法
Apr 25 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
一个完整的PHP类包含的七种语法说明
Jun 04 PHP
用php代码限制国内IP访问我们网站
Sep 26 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
Feb 04 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
laravel批量生成假数据的方法
Oct 09 PHP
laravel5.6框架操作数据curd写法(查询构建器)实例分析
Jan 26 PHP
PHP实现单例模式建立数据库连接的方法分析
Feb 11 PHP
PHP rsa加密解密算法原理解析
Dec 09 PHP
PHP队列场景以及实现代码实例详解
Feb 26 PHP
PHP中Cookie的使用详解(简单易懂)
Apr 28 #PHP
PHP解决中文乱码
Apr 28 #PHP
PHP中常用的魔术方法
Apr 28 #PHP
PHP实现Unicode编码相互转换的方法示例
Nov 17 #PHP
PHP实现文件下载【实例分享】
Apr 28 #PHP
PHP实现批量删除(封装)
Apr 28 #PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 #PHP
You might like
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
PHP抓取远程图片(含不带后缀的)教程详解
2016/10/21 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
利用PHP判断是手机移动端还是PC端访问的函数示例
2017/12/14 PHP
PHP随机数函数rand()与mt_rand()的讲解
2019/03/25 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
javascript实现时间格式输出FormatDate函数
2015/01/13 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
Vue-Router实现页面正在加载特效方法示例
2017/02/12 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
jQuery Dom元素操作技巧
2018/02/04 jQuery
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
Vue自定义render统一项目组弹框功能
2020/06/07 Javascript
python实现基于两张图片生成圆角图标效果的方法
2015/03/26 Python
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
python批量替换页眉页脚实例代码
2018/01/22 Python
利用Pandas 创建空的DataFrame方法
2018/04/08 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Python进程间通信multiprocess代码实例
2020/03/18 Python
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
计算机个人求职信范例
2014/01/24 职场文书
暑期培训班招生方案
2014/08/26 职场文书
博士导师推荐信
2015/03/25 职场文书
2015年双拥工作总结
2015/04/08 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
Go语言实现Snowflake雪花算法
2021/06/08 Golang
k8s部署redis cluster集群的实现
2021/06/24 Redis